• HTTP请求-Android


    一、HttpClient介绍

    HttpClient是用来模拟HTTP请求的,其实实质就是把HTTP请求模拟后发给Web服务器;

    Android已经集成了HttpClient,因此可以直接使用;

    注:此处HttpClient代码不只可以适用于Android,也可适用于一般的Java程序;

    HTTP GET核心代码:

    (1)DefaultHttpClient client = new DefaultHttpClient();

    (2)HttpGet get = new HttpGet(String url);//此处的URL为http://..../path?arg1=value&....argn=value

    (3)HttpResponse response = client.execute(get); //模拟请求

    (4)int code = response.getStatusLine().getStatusCode();//返回响应码

    (5)InputStream in = response.getEntity().getContent();//服务器返回的数据

    HTTP POST核心代码:

    (1)DefaultHttpClient client = new DefaultHttpClient();

    (2)BasicNameValuePair pair = new BasicNameValuePair(String name,String value);//创建一个请求头的字段,比如content-type,text/plain

    (3)UrlEncodedFormEntity entity = new UrlEncodedFormEntity(List<NameValuePair> list,String encoding);//对自定义请求头进行URL编码

    (4)HttpPost post = new HttpPost(String url);//此处的URL为http://..../path

    (5)post.setEntity(entity);

    (6)HttpResponse response = client.execute(post);

    (7)int code = response.getStatusLine().getStatusCode(); //返回响应码

    (8)InputStream in = response.getEntity().getContent();//服务器返回的数据

    在AndroidManifest.xml加入:

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

    二、服务器端代码

    服务器端代码和通过URLConnection发出请求的代码不变:

    package org.xiazdong.servlet;    
    import java.io.IOException; 
     import java.io.OutputStream;    
    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("/Servlet1")  
    
    public class Servlet1 extends HttpServlet {        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {          
    String nameParameter = request.getParameter("name");          
    String ageParameter = request.getParameter("age");          
    String name = new String(nameParameter.getBytes("ISO-8859-1"),"UTF-8");          
    String age = new String(ageParameter.getBytes("ISO-8859-1"),"UTF-8");          
    System.out.println("GET");          
    System.out.println("name="+name);          
    System.out.println("age="+age);          
    response.setCharacterEncoding("UTF-8");          
    OutputStream out = response.getOutputStream();//返回数据          
    out.write("GET请求成功!".getBytes("UTF-8"));          
    out.close();      
    }        
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {          request.setCharacterEncoding("UTF-8");          
    String name = request.getParameter("name");          
    String age  = request.getParameter("age");          
    System.out.println("POST");          
    System.out.println("name="+name);          
    System.out.println("age="+age);          
    response.setCharacterEncoding("UTF-8");          
    OutputStream out = response.getOutputStream();          
    out.write("POST请求成功!".getBytes("UTF-8"));          
    out.close();                
    }    
    } 

    三、Android客户端代码

    效果如下:

     

    在AndroidManifest.xml加入:

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

    MainActivity.java

    [java]  package org.xiazdong.network.httpclient;    import java.io.ByteArrayOutputStream;  import java.io.IOException;  import java.io.InputStream;  import java.net.URLEncoder;  import java.util.ArrayList;  import java.util.List;    import org.apache.http.HttpResponse;  import org.apache.http.NameValuePair;  import org.apache.http.client.entity.UrlEncodedFormEntity;  import org.apache.http.client.methods.HttpGet;  import org.apache.http.client.methods.HttpPost;  import org.apache.http.impl.client.DefaultHttpClient;  import org.apache.http.message.BasicNameValuePair;    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(postbutton==v){                     

    /*                      * NameValuePair代表一个HEADER,List<NameValuePair>存储全部的头字段                      * UrlEncodedFormEntity类似于URLEncoder语句进行URL编码                      * HttpPost类似于HTTP的POST请求                      * client.execute()类似于发出请求,并返回Response                      */                     

    DefaultHttpClient client = new DefaultHttpClient();                     

    List<NameValuePair> list = new ArrayList<NameValuePair>();                     

    NameValuePair pair1 = new BasicNameValuePair("name", name.getText().toString());                     

    NameValuePair pair2 = new BasicNameValuePair("age", age.getText().toString());                     

    list.add(pair1);                     

    list.add(pair2);                     

    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,"UTF-8");                     

    HttpPost post = new HttpPost("http://192.168.0.103:8080/Server/Servlet1");                     

    post.setEntity(entity);                     

    HttpResponse response = client.execute(post);                                           

    if(response.getStatusLine().getStatusCode()==200){                         

    InputStream in = response.getEntity().getContent();//接收服务器的数据,并在Toast上显示                         

    String str = readString(in);                         

    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();                                                                         

    }                     

    else Toast.makeText(MainActivity.this, "POST提交失败", Toast.LENGTH_SHORT).show();                 

    }                 

    if(getbutton==v){                     

    DefaultHttpClient client = new DefaultHttpClient();                     

    StringBuilder buf = new StringBuilder("http://192.168.0.103:8080/Server/Servlet1");                     

    buf.append("?");                     

    buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");                     

    buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));                     

    HttpGet get = new HttpGet(buf.toString());                     

    HttpResponse response = client.execute(get);                     

    if(response.getStatusLine().getStatusCode()==200){                         

    InputStream in = response.getEntity().getContent();                         

    String str = readString(in);                         

    Toast.makeText(MainActivity.this, str, 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);      }      protected String readString(InputStream in) throws Exception {          byte[]data = new byte[1024];          int length = 0;          ByteArrayOutputStream bout = new ByteArrayOutputStream();          while((length=in.read(data))!=-1){              bout.write(data,0,length);          }          return new String(bout.toByteArray(),"UTF-8");                }  } 

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/wingjay/p/3986217.html
Copyright © 2020-2023  润新知