Android入門:發送HTTP的GET和POST請求

來源:互聯網
上載者:User
文章目錄
  • GET:
HTTP的請求詳解在我的部落格中已經講解過:

http://blog.csdn.net/xiazdong/article/details/7215296

我在http://blog.csdn.net/xiazdong/article/details/7725867 中已經封裝了一個HTTP請求的輔助類,因此可以很簡單的發送GET、POST請求;

如HttpRequestUtil.sendGetRequest();是發送GET請求;



一、核心代碼

HTTP GET 核心代碼:


(1)String value = URLEncoder.encode(String value,"UTF-8");

(2)String path = "http://../path?key="+value;

(3)URL url = new URL(path);//此處的URL需要進行URL編碼;

(4)HttpURLConnection con = (HttpURLConnection)url.openConnection();

(5)con.setRequestMethod("GET");

(6)con.setDoOutput(true);

(7)OutputStream out = con.getOutputStream();

(8)out.write(byte[]buf);

(9)int code = con.getResponseCode();


HTTP POST 核心代碼:


(1)String value = URLEncoder.encode(String value,"UTF-8");

(2)byte[]buf = ("key="+value).getBytes("UTF-8");

(3)String path = "http://../path";

(4)URL url = new URL(path);//此處的URL需要進行URL編碼;

(5)HttpURLConnection con = (HttpURLConnection)url.openConnection();

(6)con.setRequestMethod("POST");

(7)con.setDoOutput(true);

(8)OutputStream out = con.getOutputStream();

(9)out.write(byte[]buf);

(10)int code = con.getResponseCode();

二、GET和POST亂碼解決方式

GET:

在doGet中加入:

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

POST:

在doPost中加入:


request.setCharacterEncoding("UTF-8");

詳情請看我的博文:

http://blog.csdn.net/xiazdong/article/details/7217022

三、伺服器端代碼

package org.xiazdong.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/PrintServlet")public class PrintServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");String age = new String(request.getParameter("age").getBytes("ISO-8859-1"),"UTF-8");System.out.println("姓名:"+name+"\n年齡:"+age);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");System.out.println("姓名:"+request.getParameter("name")+"\n年齡:"+request.getParameter("age"));}}

四、Android端代碼

在AndroidManifest.xml加入:

<uses-permission android:name="android.permission.INTERNET"/>

MainActivity.java

package org.xiazdong.network.submit;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private EditText name, age;private Button getbutton, postbutton;private OnClickListener listener = new OnClickListener() {@Overridepublic void onClick(View v) {try{if (getbutton == v) {/* * 因為是GET請求,所以需要將請求參數添加到URL後,並且還需要進行URL編碼 * URL = http://192.168.0.103:8080/Server/PrintServlet?name=%E6%88%91&age=20 * 此處需要進行URL編碼因為瀏覽器提交時自動進行URL編碼 * */StringBuilder buf = new StringBuilder("http://192.168.0.103:8080/Server/PrintServlet");buf.append("?");buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));URL url = new URL(buf.toString());HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");if(conn.getResponseCode()==200){Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();}else Toast.makeText(MainActivity.this, "GET提交失敗", Toast.LENGTH_SHORT).show();}if (postbutton == v) {/* * 如果是POST請求,則請求參數放在請求體中, * name=%E6%88%91&age=12 *  * */StringBuilder buf = new StringBuilder();buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));byte[]data = buf.toString().getBytes("UTF-8");URL url = new URL("http://192.168.0.103:8080/Server/PrintServlet");HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);//如果要輸出,則必須加上此句OutputStream out = conn.getOutputStream();out.write(data);if(conn.getResponseCode()==200){Toast.makeText(MainActivity.this, "GET提交成功", Toast.LENGTH_SHORT).show();}else Toast.makeText(MainActivity.this, "GET提交失敗", Toast.LENGTH_SHORT).show();}}catch(Exception e){}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);name = (EditText) this.findViewById(R.id.name);age = (EditText) this.findViewById(R.id.age);getbutton = (Button) this.findViewById(R.id.getbutton);postbutton = (Button) this.findViewById(R.id.postbutton);getbutton.setOnClickListener(listener);postbutton.setOnClickListener(listener);}}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.