文档章节

Android使用Apache HttpClient发送GET、POST请求

 我的去哈哈
发布于 2014/06/02 07:40
字数 699
阅读 1209
收藏 6

简单的网页下载,HttpURLConnection可以完成,但是涉及到用户登录等权限相关问题,就需要涉及Session、Cookies。,就很难使用HttpURLConnection来处理了。Apache开源组织提供了一个HttpClient项目可以处理这些问题。HttpClient关注于如何发送请求、接受请求,以及管理HTTP链接。
使用HttpClient对象来发送请求、接受响应步骤:

  1. 创建HttpClient对象

  2. 如果要发送GET请求,创建HttpGet对象;如果是POST请求,则创建HttpPost对象。

  3. 如果需要添加参数,对于HttpGet直接在构造URL的时候填入参数。对于POST请求,使用setEntity(HttpEntity entity)方法来设置

  4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,此方法返回一个HttpResponse

  5. 调用HttpResponse的getALLHeaders()、getHeaders(String name)等方法可获取服务器响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器响应内容。

注意:

不少地方说可以使用HttpGet和HttpPost共同的setParams(HttpParams params)方法添加请求参数,但是我没有设置成功,网上搜索发现好多人也没成功。Even Apache’s official example uses URIBuilder’s setParameter method to build the params out in the URI,所以没有使用这种方法.

GET请求Demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class MainActivity extends Activity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         TextView textViewShow = (TextView) findViewById(R.id.showText);
         //直接在URL后添加请求参数
         String url = "http://192.168.1.103/index.php?get1=hello&get2=bay" ;
         try {
             // 创建DefaultHttpClient对象
             HttpClient httpclient = new DefaultHttpClient();
             // 创建一个HttpGet对象
             HttpGet get = new HttpGet(url);
             // 获取HttpResponse对象
             HttpResponse response = httpclient.execute(get);
             //判断是否链接成功
             if (response.getStatusLine().getStatusCode() == 200 ) {
                 //实体转换为字符串
                 String content = EntityUtils.toString(response.getEntity());
                 textViewShow.setText(content);
             } else {
                 textViewShow.setText( "网络错误" );
             }
 
         } catch (ClientProtocolException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         // Inflate the menu; this adds items to the action bar if it is present.
         getMenuInflater().inflate(R.menu.main, menu);
         return true ;
     }
}

POST请求Demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class MainActivity extends Activity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         TextView textViewShow = (TextView) findViewById(R.id.showText);
 
         String url = "http://192.168.1.103/index.php" ;
         HttpClient httpClient = new DefaultHttpClient();
         try {
         HttpPost post = new HttpPost(url);
         List params = new ArrayList();
         params.add( new BasicNameValuePair( "get1" , "hello" ));
         params.add( new BasicNameValuePair( "get2" , "usrl" ));
 
             post.setEntity( new UrlEncodedFormEntity(params, HTTP.UTF_8));
             HttpResponse response = httpClient.execute(post);
             if (response.getStatusLine().getStatusCode() == 200 ){
                 String content = EntityUtils.toString(response.getEntity());
                 textViewShow.setText(content);
 
             } else {
                 textViewShow.setText( "网络问题" );
             }
 
         } catch (UnsupportedEncodingException e) {
             // TODO Auto-generated catch block
             textViewShow.setText( "UnsupportedEncodingException" );
         } catch (ClientProtocolException e) {
             // TODO Auto-generated catch block
             textViewShow.setText( "ClientProtocolException" );
         } catch (IOException e) {
             // TODO Auto-generated catch block
             textViewShow.setText( "IOException" );
         }
 
     }
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         // Inflate the menu; this adds items to the action bar if it is present.
         getMenuInflater().inflate(R.menu.main, menu);
         return true ;
     }
 
}


© 著作权归作者所有

粉丝 3
博文 57
码字总数 55253
作品 0
东城
私信 提问
android-async-http使用例子

android-async-http是一个强大的第三方开源网络请求库, 官网源码:https://github.com/loopj/android-async-http 官网教程:http://loopj.com/android-async-http/ 这个网络请求库是基于Apa...

penngo
2015/08/05
1K
0
Android http中文乱码问题

总结下android下的中文乱码问题,以后开发东西基本就在这里写了。一是通过javaeye能认识不少朋友。二是对自己的博客内容进行管理。三是平时日志在sina的博客里写吧。 一 url to android JAV...

xiahuawuyu
2012/10/11
1K
0
Android Fetch请求问题

前言 作为前端开发人员,网络请求工具对大家来说肯定不陌生。iOS的AFNetworking,Android的okHttp等。但是对于RN来说,我们最常用到的就是js原生的Fetch请求了。 React Native提供了和web标准...

浅夏晴空
2018/12/04
0
0
Android HttpClient上传文件与Httpconnection知识小结

Android上传文件到服务端可以使用HttpConnection 上传文件,也可以使用Android封装好的HttpClient类。当仅仅上传文件可以直接使用httpconnection 上传比较方便快捷。 1、使用HttpConection上...

安克诚
2012/07/11
550
0
Android开发_使用HttpURLConnection实现多线程下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangty0223/article/details/9353495 HttpURLConnection继承了URLConnection,因此也可用于向指定网站发送G...

张腾元_Ternence
2013/07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
18分钟前
3
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
34分钟前
4
0
IT兄弟连 HTML5教程 HTML5表单 HTML表单设计1

表单是PHP程序中最常使用的收集站点访问者信息的数据输入界面。通过表单浏览器获取用户的输入数据,并传送给Web服务器的脚本程序中,以各种不同的方式进行处理。在表单中提供了多种输入方式,...

老码农的一亩三分地
35分钟前
4
0
武者Vue

本文转载于:专业的前端网站➼武者Vue 1 - Introduction2 - The Vue Instance3 - Data & Methods4 - Data Binding5 - Events6 - Event Modifiers7 - Keyboard Events8 - Two-Way Data......

前端老手
41分钟前
6
0
uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
51分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部