Android入门 发送HTTP的GET和POST请求

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               


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入门 发送HTTP的GET和POST请求_第1张图片

Android入门 发送HTTP的GET和POST请求_第2张图片


四、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() {  @Override  public 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){       }  } }; @Override public 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); }}

Android入门 发送HTTP的GET和POST请求_第3张图片




           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

Android入门 发送HTTP的GET和POST请求_第4张图片

你可能感兴趣的:(Android入门 发送HTTP的GET和POST请求)