zoukankan      html  css  js  c++  java
  • Android入门:发送HTTP的GET和POST请求


    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() {
    		@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);
    	}
    }





  • 相关阅读:
    算法笔记_187:历届试题 网络寻路(Java)
    算法笔记_186:历届试题 高僧斗法(Java)
    算法笔记_185:历届试题 格子刷油漆(Java)
    Tomcat,JBoss与JBoss Web
    JBoss Web和Tomcat的区别
    tomcat与jboss等容器的区别
    dubbo
    ZooKeeper学习第一期---Zookeeper简单介绍
    Java GC系列
    Tomcat中JVM内存溢出及合理配置
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058325.html
Copyright © 2011-2022 走看看