步骤:
1.新建一个包com.tb.http.request
2.新建一个类HttpRequestUtil
3.在类里面写方法:
A.因为是从客户端向服务端请求,所以返回的是JSON格式,而这里就可以返回String。
方法中需要传入的参数:String uri , List<NameValuePair> parameters(简单名称值对节点类NameValuePair)
B.得到一个HttpClient对象HttpClient client = new DefaultHttpClient();
C.得到一个HttpPost请求对象HttpPost request = new HttpPost(uri);
D.请求实体HttpEntity也是一个接口,我们用它的实现类UrlEncodedFormEntity来创建对象,注意后面一个String类型的参数是用来指定编码的。HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");
E.将参数对象绑定到请求对象当中request.setEntity(entity);
F.通过HttpClient执行请求,返回一个HttpResponse响应对象
HttpResponse response = client.execute(request);
G.判断响应是否成功:如果成功,使用HttpEntity‚的一个帮助类 (EntityUtil)把服务器返回的数据(从响应中获取消息实体)转化为字符串,并返回该字符串。否则,返回空。
EntityUtils.toString() (这个方法能避免中文乱码)
HttpClient是Apache开源组织提供的一个开源的项目,从名字上就可以看出,它是一个简单的HTTP客户端(并不是浏览器),可以发送HTTP请求,接受HTTP响应。但是不会缓存服务器的响应,不能执行HTTP页面中签入嵌入的JS代码,自然也不会对页面内容进行任何解析、处理,这些都是需要开发人员来完成的。 HttpClient其实是一个interface类型,HttpClient封装了对象需要执行的Http请求、身份验证、连接管理和其它特性。从文档上看,HttpClient有三个已知的实现类分别是:AbstractHttpClient, AndroidHttpClient, DefaultHttpClient,会发现有一个专门为Android应用准备的实现类AndroidHttpClient,当然使用常规的DefaultHttpClient也可以实现功能,但是既然开发的是Android应用程序,还是使用Android专有的实现类,一定有其优势。 |
‚HttpEntity实体即可以使流也可以使字符串形式。 try { 1. HttpEntity entity = new StringEntity("这一个字符串实体", "UTF-8"); 2. //内容类型 3. System.out.println(entity.getContentType()); 4. //内容的编码格式 5. System.out.println(entity.getContentEncoding()); 6. //内容的长度 7. System.out.println(entity.getContentLength()); 8. //把内容转成字符串 9. System.out.println(EntityUtils.toString(entity)); 10. //内容转成字节数组 11. System.out.println(EntityUtils.toByteArray(entity).length); 12. //还有个直接获得流 13. //entity.getContent(); 14. } catch (UnsupportedEncodingException e) { 15. throw new RuntimeException(e); 16. } catch (ParseException e) { 17. } catch (IOException e) { 18. } |
具体代码:
package com.tb.http.request;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class HttpRequestUtil {
public String HttpPostRequest(String uri,List<NameValuePair> parameters){
String JsonStr=null;
try {
HttpClient client=new DefaultHttpClient();
HttpPost request =new HttpPost(uri);
HttpEntity entity=new UrlEncodedFormEntity(parameters,"utf-8");
request.setEntity(entity);
HttpResponse response=client.execute(request);
if(response.getStatusLine().getStatusCode()==200){
JsonStr=EntityUtils.toString(response.getEntity());
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return JsonStr;
}
}