zoukankan      html  css  js  c++  java
  • 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");                }  } 

  • 相关阅读:
    git 命令手册
    leetcode #7 revert integer 问题
    leetcode #1 twoSum问题:简单实用哈希表
    c++模板函数分离编译的问题
    matlab 与c/c++ 混合MEX的编程
    springboot项目打war包
    springboot-jpa多数据源
    springboot使用RestTemplate+httpclient连接池发送http消息
    IDEA如何安装lombok
    Springboot如何启用文件上传功能
  • 原文地址:https://www.cnblogs.com/wingjay/p/3986217.html
Copyright © 2011-2022 走看看