Android中的HTTP请求

在Android上发送HTTP请求的方式一般有两种,HttpURLConnection和HttpClient。

1、HttpURLConnection:
首先需要获取HttpURLConnection的实例,一般只需要new一个URL对象并传入目标的网络地址,让背后调用openConnection()方法即可:

URL url=new URL("http://www.baidu.com");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();

设置HTTP请求使用的方法,常用的方法主要有两个:GET和POST。

conn.setRequestMethod("GET");

设置连接超时毫秒数

conn.setConnectionTimeout(5000);

设置读取超时毫秒数

conn.setReadTimeout(5000);

之后调用getInputStream()方法就可以获取到服务器返回的输入流了

InputStream in=conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
    stringBuffer.append(line);
}
Log.d("TAG",stringBuffer.toString());

关闭HTTP连接

conn.disconnect();

如果是想提交数据给服务器,之需要将HTTP请求的方法改为POST,并在获取输入流之前把要提交的数据写出即可,注意每条数据都要以键值对的形式存在,数据与数据之间用&符号隔开:

conn.setRequestMethod("POST");
DataOutputStream out=new DataOutputStream(conn.getOutputStream());
out.writeBytes("username=admin&password=123456");

2、HttpClient
HttpClient可以完成和HttpURLConnection几乎一模一样的功能,但两者的用法却有较大的差别。
HttpClient是一个接口,因此无法创建它的实例,通常情况下会创建一个DefaultHttpClient的实例:

HttpClient httpClient=new DefaultHttpClient();

如果想要发起一条GET请求,可以创建一个HttpGet对象,并传入目标的网络地址,然后调用HttpClient的execute()方法即可:

HttpGet httpGet=new HttpGet("http://www.taobao.com");
HttpResponse httpResponse=httpClient.execute(httpGet);

如果是POST请求,胡比GET请求稍微复杂一点,我们需要创建一个HttpPost对象,并传入目标的网络地址:

HttpPOST httpPost=new HttpPost("http://www.taobao.com");

然后通过一个NameValuePair集合存放待提交的参数,并将这个参数集合传入到一个UrlEncodedFormEntity中,然后调用HttpPost的setEntity()方法将构建好的UrlEncodedFormEntity传入:

List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new NameValuePair("username","admin"));
params.add(new NameValuePair("password","123456"));
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,"utf-8");
httpPost.setEntity(entity);

接下来的操作和HttpGet一样了,调用HttpClient的execute()方法,并将HttpPost对象传入即可:

HttpResponse httpResponse=httpClient.execute(httpPost);

执行excute()方法后会返回一个HttpResponse对象,服务器返回的信息就会包含在里面,通常情况下,我们都会先去除服务器返回的状态码,如果等于200就说明请求和相应都成功了。

if(httpResponse.getStatusLine().getStatusCode()==200){
    //请求和相应都成功了
}

接下来在这个if判断的内部取出服务器的具体内容,可以调用getEntity()方法获得到一个HttpEntity实例,然后再调用EntityUtils.toString()方法将HttpEntity转换成字符串即可:

HttpEntity entity=httpResponse.getEntity();
String response=EntityUtils.toString(entity);

如果返回的数据中带有中文,需要指定字符编码集为utf-8,否则会出现乱码:

String str=EntityUtils.toString(entity,"utf-8");

你可能感兴趣的:(安卓开发)