一、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();//服务器返回的数据
 

二、服务器端代码

 
服务器端代码和通过URLConnection发出请求的代码不变:
 
  1. package org.xiazdong.servlet;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. @WebServlet("/Servlet1")
  10. public class Servlet1 extends HttpServlet {
  11. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. String nameParameter = request.getParameter("name");
  13. String ageParameter = request.getParameter("age");
  14. String name = new String(nameParameter.getBytes("ISO-8859-1"),"UTF-8");
  15. String age = new String(ageParameter.getBytes("ISO-8859-1"),"UTF-8");
  16. System.out.println("GET");
  17. System.out.println("name="+name);
  18. System.out.println("age="+age);
  19. response.setCharacterEncoding("UTF-8");
  20. OutputStream out = response.getOutputStream();//返回数据
  21. out.write("GET请求成功!".getBytes("UTF-8"));
  22. out.close();
  23. }
  24. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  25. request.setCharacterEncoding("UTF-8");
  26. String name = request.getParameter("name");
  27. String age  = request.getParameter("age");
  28. System.out.println("POST");
  29. System.out.println("name="+name);
  30. System.out.println("age="+age);
  31. response.setCharacterEncoding("UTF-8");
  32. OutputStream out = response.getOutputStream();
  33. out.write("POST请求成功!".getBytes("UTF-8"));
  34. out.close();
  35. }
  36. }
 

三、Android客户端代码

 
效果如下:
 
 
 

在AndroidManifest.xml加入:

  1. <uses-permission android:name="android.permission.INTERNET"/>
 
MainActivity.java
 
  1. package org.xiazdong.network.httpclient;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.URLEncoder;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import org.apache.http.HttpResponse;
  9. import org.apache.http.NameValuePair;
  10. import org.apache.http.client.entity.UrlEncodedFormEntity;
  11. import org.apache.http.client.methods.HttpGet;
  12. import org.apache.http.client.methods.HttpPost;
  13. import org.apache.http.impl.client.DefaultHttpClient;
  14. import org.apache.http.message.BasicNameValuePair;
  15. import android.app.Activity;
  16. import android.os.Bundle;
  17. import android.view.View;
  18. import android.view.View.OnClickListener;
  19. import android.widget.Button;
  20. import android.widget.EditText;
  21. import android.widget.Toast;
  22. public class MainActivity extends Activity {
  23. private EditText name, age;
  24. private Button getbutton, postbutton;
  25. private OnClickListener listener = new OnClickListener() {
  26. @Override
  27. public void onClick(View v) {
  28. try{
  29. if(postbutton==v){
  30. /*
  31. * NameValuePair代表一个HEADER,List<NameValuePair>存储全部的头字段
  32. * UrlEncodedFormEntity类似于URLEncoder语句进行URL编码
  33. * HttpPost类似于HTTP的POST请求
  34. * client.execute()类似于发出请求,并返回Response
  35. */
  36. DefaultHttpClient client = new DefaultHttpClient();
  37. List<NameValuePair> list = new ArrayList<NameValuePair>();
  38. NameValuePair pair1 = new BasicNameValuePair("name", name.getText().toString());
  39. NameValuePair pair2 = new BasicNameValuePair("age", age.getText().toString());
  40. list.add(pair1);
  41. list.add(pair2);
  42. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,"UTF-8");
  43. HttpPost post = new HttpPost("http://192.168.0.103:8080/Server/Servlet1");
  44. post.setEntity(entity);
  45. HttpResponse response = client.execute(post);
  46. if(response.getStatusLine().getStatusCode()==200){
  47. InputStream in = response.getEntity().getContent();//接收服务器的数据,并在Toast上显示
  48. String str = readString(in);
  49. Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
  50. }
  51. else Toast.makeText(MainActivity.this, "POST提交失败", Toast.LENGTH_SHORT).show();
  52. }
  53. if(getbutton==v){
  54. DefaultHttpClient client = new DefaultHttpClient();
  55. StringBuilder buf = new StringBuilder("http://192.168.0.103:8080/Server/Servlet1");
  56. buf.append("?");
  57. buf.append("name="+URLEncoder.encode(name.getText().toString(),"UTF-8")+"&");
  58. buf.append("age="+URLEncoder.encode(age.getText().toString(),"UTF-8"));
  59. HttpGet get = new HttpGet(buf.toString());
  60. HttpResponse response = client.execute(get);
  61. if(response.getStatusLine().getStatusCode()==200){
  62. InputStream in = response.getEntity().getContent();
  63. String str = readString(in);
  64. Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
  65. }
  66. else Toast.makeText(MainActivity.this, "GET提交失败", Toast.LENGTH_SHORT).show();
  67. }
  68. }
  69. catch(Exception e){}
  70. }
  71. };
  72. @Override
  73. public void onCreate(Bundle savedInstanceState) {
  74. super.onCreate(savedInstanceState);
  75. setContentView(R.layout.main);
  76. name = (EditText) this.findViewById(R.id.name);
  77. age = (EditText) this.findViewById(R.id.age);
  78. getbutton = (Button) this.findViewById(R.id.getbutton);
  79. postbutton = (Button) this.findViewById(R.id.postbutton);
  80. getbutton.setOnClickListener(listener);
  81. postbutton.setOnClickListener(listener);
  82. }
  83. protected String readString(InputStream in) throws Exception {
  84. byte[]data = new byte[1024];
  85. int length = 0;
  86. ByteArrayOutputStream bout = new ByteArrayOutputStream();
  87. while((length=in.read(data))!=-1){
  88. bout.write(data,0,length);
  89. }
  90. return new String(bout.toByteArray(),"UTF-8");
  91. }
  92. }

Android入门:用HttpClient模拟HTTP的GET和POST请求的更多相关文章

  1. 用HttpClient模拟HTTP的GET和POST请求(转)

    本文转自:http://blog.csdn.net/xiazdong/article/details/7724349 一.HttpClient介绍   HttpClient是用来模拟HTTP请求的,其 ...

  2. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  3. Android入门(十二)SQLite事务、升级数据库

    原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...

  4. HttpClient模拟http请求

    Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且 ...

  5. 【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

    Xamarin.Android 入门之:Xamarin+vs2015 环境搭建   一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客 ...

  6. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...

  7. android 入门 005(登录记住)

    android 入门 005(登录记住) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  8. Android入门:绑定本地服务

    一.绑定服务介绍   前面文章中讲过一般的通过startService开启的服务,当访问者关闭时,服务仍然存在: 但是如果存在这样一种情况:访问者需要与服务进行通信,则我们需要将访问者与服务进行绑定: ...

  9. Android入门视频推荐

      marschen老师的Android入门视频推荐网址: 1.Android应用程序开发视频教程(重制版)第一季 2.Android应用开发视频教程(重制版)第二季 2.marschen老师的个人微 ...

随机推荐

  1. autocomplete参数说明以及实例

    JQuery autocomplete使用手册 Jquery autocomplete是一个很强大的类似google suggest的自动提示插件.它几乎可以满足我们所有的需要. 官方网站:http: ...

  2. POJ1426Find The Multiple

    http://poj.org/problem?id=1426 题意 : 输入一个数n,找n的倍数m,这个m所满足的条件是,每一位数只能由0或1组成,在题目的旁边用红色的注明了Special Judge ...

  3. Java运行系统命令并获取值(Process java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)

    package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; ...

  4. iOS UICollectionView简单使用

    UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableVie ...

  5. 创业草堂之二十二:创业公司C类官员的职位说明书

    麻雀虽小,五脏俱全. 创业公司启航,三五十来个人.七八条枪,其中“C”字开头的官儿还真少不了 – CEO.CTO.COO.CFO.CMO.CIO.CCO.CLO.Chairman/Chairwoman ...

  6. python 利用pop3接收邮件并保存附件

    def SaveAttach():# login the pop3 server ,retrive the new mails ,and download the attachments dstdir ...

  7. login.java

    import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Login extends JFrame ...

  8. 计算机视觉和人工智能的状态:我们已经走得很远了 The state of Computer Vision and AI: we are really, really far away.

    The picture above is funny. But for me it is also one of those examples that make me sad about the o ...

  9. smartcomb:用php实现的web模块拼合器

    smartcomb是一个用php实现的web模块拼合器,相对于其他的代码拼合工具,如下特性: 可以拼合任意类型的文件,不限于js文件. 集中并声明依赖,自动分析依赖拼合,按需加载. 支持多种配置切换 ...

  10. 29 个 PHP 的 Excel 处理类

    下面的 PHP Excel 处理类中,包含 Excel 读写.导入导出等相关的类,列表如下: PHP Excel Reader classes 1. Read Excel Spreadsheets u ...