理解Android的Http协议
来源:互联网 发布:影像测量仪软件 编辑:程序博客网 时间:2024/06/05 15:32
HTTP是超文本传送协议(hypertext transport protocol),用于传送WWW方式的数据,属于应用层的面向对象的协议。HTTP采用了请求/响应的模型,HTTP定义了与服务器交互的不同方式,最基本的4种分别是GET、POST、PUT、DELETE,URL则全称为资源描述符,我们可以认为一个URL地址描述了一个网络上的资源,而HTTP中的GET、POST、PUT、DELETE分别对应这个资源的查、改、增、删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
HTTP请求服务器的流程大概分4步:
1、生成一个请求对象。
2、客户端向服务器发送一个请求。
3、服务器响应客户端请求。
4、断开连接。
使用HTTP的GET向百度服务器请求获取信息
实现的效果是点击Button,向百度服务器请求数据,获取信息。
package com.tang.Javen;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.impl.conn.DefaultClientConnection;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button button = null;private HttpResponse httpResponse = null;private HttpEntity httpEntity = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new OnClickListener(){public void onClick(View v){//生成一个请求对象HttpGet httpGet = new HttpGet("http://www.baidu.com");//生成一个客户端对象HttpClient httpClient = new DefaultHttpClient();InputStream inputStream = null;try{//向服务端发送一次请求,并且服务器端会返回一个httpResponsehttpResponse = httpClient.execute(httpGet);//想要获取这个服务器返回的数据,则可以使用HttpEntityhttpEntity = httpResponse.getEntity();//获取这个httpEntity的输入输出流inputStream = httpEntity.getContent();//接下来就是IO流的操作了BufferedReader reader = new BufferedReader( new InputStreamReader(inputStream));String result = "";String line = "";while((line = reader.readLine()) != null){result = result + line;}System.out.println(result);} catch (Exception e){// TODO Auto-generated catch blocke.printStackTrace();}}}); }}
这里可以看到获取网络服务器的信息步骤:
1、生成一个请求的对象,并且把百度的URL地址作为参数传递进去。
HttpGet httpGet = new HttpGet("http://www.baidu.com");
2、生成一个客户端对象。
HttpClient httpClient = new DefaultHttpClient();
httpResponse = httpClient.execute(httpGet);
4、如果想获取到HttpResponse中的数据,则需要使用到HttpEntity,并且获取InputStream。
httpEntity = httpResponse.getEntity();//获取这个httpEntity的输入输出流inputStream = httpEntity.getContent();
5、接着从这个inputStream中读取数据。
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String result = "";String line = "";while((line = reader.readLine()) != null){result = result + line;}System.out.println(result);
当需要使用GET方法发送请求时需要带参数时,则需要在URL后面加上(?**=**&**=**);比如我想把name="zhangsan", age="20"发送到服务器中去,则URL应该写成http://www.baidu.com?name=zhangsan&age=20
使用HTTP的POST向百度服务器请求获取信息
POST请求的方法跟GET差不多,只不过在传递参数时有所不同。
postButton = (Button)findViewById(R.id.post); postButton.setOnClickListener(new OnClickListener(){public void onClick(View v){HttpPost requestPost = new HttpPost("http://www.baidu.com");NameValuePair pair1 = new BasicNameValuePair("name", "zhangsan");NameValuePair pair2 = new BasicNameValuePair("age", "20");List<NameValuePair> pairs = new ArrayList<NameValuePair>();pairs.add(pair1);pairs.add(pair2);try{UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(pairs);requestPost.setEntity(formEntity);HttpClient httpClient = new DefaultHttpClient();InputStream inputStream = null;try{//向服务端发送一次请求,并且服务器端会返回一个httpResponsehttpResponse = httpClient.execute(requestPost);//想要获取这个服务器返回的数据,则可以使用HttpEntityhttpEntity = httpResponse.getEntity();//获取这个httpEntity的输入输出流inputStream = httpEntity.getContent();//接下来就是IO流的操作了BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String result = "";String line = "";while((line = reader.readLine()) != null){result = result + line;}System.out.println(result);} catch (Exception e){// TODO Auto-generated catch blocke.printStackTrace();}} catch (UnsupportedEncodingException e){// TODO Auto-generated catch blocke.printStackTrace();}}});
POST需要传递的参数需要用NameValuePair来传递,NameValuePair用一对键值对来表示一个查询参数,将多个NameValuePair放到一个List中就形成了一组查询参数,但是List<NameValuePair>并不能直接使用,需要用UrlEncodedFormEntity编码之后才能使用。通过requestPost.setEntity(formEntity)就将这些查询参数传递到post请求中去了。
0 0
- 理解Android的Http协议
- http协议的理解
- http协议的理解
- http协议的理解
- Http协议的理解
- HTTP协议的理解
- Http协议的理解
- http协议的理解
- HTTP协议的理解
- http协议的理解
- HTTP 协议的理解
- Http协议的深入理解
- 对http协议的理解
- 简单的http协议理解
- ios HTTP协议的理解
- Http协议的简单理解
- 简单的理解HTTP协议
- android的http协议
- Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误
- matlab中repmat函数的用法
- 开始学习Linux操作系统了
- 内部类
- 安卓程序基本结构分析
- 理解Android的Http协议
- 实现字符串的查找和替换
- hdu 1016 Prime Ring Problem (DFS)
- IOS7中ViewController切换动画
- XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit。通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能。本文将演示如何在
- 接口
- POJ 1663(水题)
- Linux系统命令大全
- 1018. Public Bike Management (30)