`
齐晓威_518
  • 浏览: 618123 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

HttpURLConnection和HTTPClient的比较,以及使用规则

 
阅读更多

1.概念      

      HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。

      除此之外,在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。使用HttpClient可以快速开发出功能强大的Http程序。

2.区别

HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等,

HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。

3.案例

HttpURLConnection

String urlAddress = "http://192.168.1.102:8080/AndroidServer/login.do";
URL url;
HttpURLConnection uRLConnection;
publicUrlConnectionToServer(){

}//向服务器发送get请求
publicString doGet(String username,String password){
String getUrl = urlAddress + "?username="+username+"&password="+password;
try{
url =newURL(getUrl);
uRLConnection = (HttpURLConnection)url.openConnection();
InputStream is = uRLConnection.getInputStream();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();
uRLConnection.disconnect();
returnresponse;
}catch(MalformedURLException e) {
e.printStackTrace();
returnnull;
}catch(IOException e) {
e.printStackTrace();
returnnull;
}
}
 //向服务器发送post请求
publicString doPost(String username,String password){
try{
url =newURL(urlAddress);
uRLConnection = (HttpURLConnection)url.openConnection();
uRLConnection.setDoInput(true);
uRLConnection.setDoOutput(true);
uRLConnection.setRequestMethod("POST");
uRLConnection.setUseCaches(false);
uRLConnection.setInstanceFollowRedirects(false);
uRLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
uRLConnection.connect();

DataOutputStream out =newDataOutputStream(uRLConnection.getOutputStream());
String content = "username="+username+"&password="+password;
out.writeBytes(content);
out.flush();
out.close();

InputStream is = uRLConnection.getInputStream();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();
uRLConnection.disconnect();
returnresponse;
}catch(MalformedURLException e) {
e.printStackTrace();
returnnull;
}catch(IOException e) {
e.printStackTrace();
returnnull;
}
}

HTTPClient

String urlAddress = "http://192.168.1.102:8080/qualityserver/login.do";
publicHttpClientServer(){

}

publicString doGet(String username,String password){
String getUrl = urlAddress + "?username="+username+"&password="+password;
HttpGet httpGet =newHttpGet(getUrl);
HttpParams hp = httpGet.getParams();
hp.getParameter("true");
//hp.
//httpGet.setp
HttpClient hc =newDefaultHttpClient();
try{
HttpResponse ht = hc.execute(httpGet);
if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity he = ht.getEntity();
InputStream is = he.getContent();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();

//String str = EntityUtils.toString(he);
System.out.println("========="+response);
returnresponse;
}else{
return"error";
}
}catch(ClientProtocolException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}catch(IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}
}

publicString doPost(String username,String password){
//String getUrl = urlAddress + "?username="+username+"&password="+password;
HttpPost httpPost =newHttpPost(urlAddress);
List params =newArrayList();
NameValuePair pair1 =newBasicNameValuePair("username", username);
NameValuePair pair2 =newBasicNameValuePair("password", password);
params.add(pair1);
params.add(pair2);

HttpEntity he;
try{
he =newUrlEncodedFormEntity(params, "gbk");
httpPost.setEntity(he);

}catch(UnsupportedEncodingException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}

HttpClient hc =newDefaultHttpClient();
try{
HttpResponse ht = hc.execute(httpPost);
//连接成功
if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity het = ht.getEntity();
InputStream is = het.getContent();
BufferedReader br =newBufferedReader(newInputStreamReader(is));
String response = "";
String readLine =null;
while((readLine =br.readLine()) !=null){
//response = br.readLine();
response = response + readLine;
}
is.close();
br.close();

//String str = EntityUtils.toString(he);
System.out.println("=========&&"+response);
returnresponse;
}else{
return"error";
}
}catch(ClientProtocolException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}catch(IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
return"exception";
}
}

servlet端json转化: 

resp.setContentType("text/json");
resp.setCharacterEncoding("UTF-8");
toDo =newToDo();
List<UserBean> list =newArrayList<UserBean>();
list = toDo.queryUsers(mySession);
String body;

//设定JSON
JSONArray array =newJSONArray();
for(UserBean bean : list)
{
JSONObject obj =newJSONObject();
try
{
obj.put("username", bean.getUserName());
obj.put("password", bean.getPassWord());
}catch(Exception e){}
array.add(obj);
}
pw.write(array.toString());
System.out.println(array.toString());

android端接收:

String urlAddress = "http://192.168.1.102:8080/qualityserver/result.do";
String body =
getContent(urlAddress);
JSONArray array =newJSONArray(body);
for(inti=0;i<array.length();i++)
{
obj = array.getJSONObject(i);
sb.append("用户名:").append(obj.getString("username")).append("\t");
sb.append("密码:").append(obj.getString("password")).append("\n");

HashMap<String, Object> map =newHashMap<String, Object>();
try{
userName = obj.getString("username");
passWord = obj.getString("password");
}catch(JSONException e) {
e.printStackTrace();
}
map.put("username", userName);
map.put("password", passWord);
listItem.add(map);

}

}catch(Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}

if(sb!=null)
{
showResult.setText("用户名和密码信息:");
showResult.setTextSize(20);
}else
extracted();

//设置adapter
SimpleAdapter simple =newSimpleAdapter(this,listItem,
android.R.layout.simple_list_item_2,
newString[]{"username","password"},
newint[]{android.R.id.text1,android.R.id.text2});
listResult.setAdapter(simple);

listResult.setOnItemClickListener(newOnItemClickListener() {
@Override
publicvoidonItemClick(AdapterView<?> parent, View view,
intposition,longid) {
intpositionId = (int) (id+1);
Toast.makeText(MainActivity.this, "ID:"+positionId, Toast.LENGTH_LONG).show();

}
});
}
privatevoidextracted() {
showResult.setText("没有有效的数据!");
}
//和服务器连接
privateString getContent(String url)throwsException{
StringBuilder sb =newStringBuilder();
HttpClient client =newDefaultHttpClient();
HttpParams httpParams =client.getParams();

HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
HttpResponse response = client.execute(newHttpGet(url));
HttpEntity entity =response.getEntity();

if(entity !=null){
BufferedReader reader =newBufferedReader(newInputStreamReader
(entity.getContent(),"UTF-8"),8192);
String line =null;
while((line= reader.readLine())!=null){
sb.append(line +"\n");
}
reader.close();
}
returnsb.toString();
}

 

 

以下例子:为实际项目开发中代码片断,需要请致电邮箱:

qixiaowei999@163.com

分享到:
评论

相关推荐

    httpclient.zip

    本篇将深入讲解HttpClient的基本概念、使用方法以及在实际项目中的应用。 一、HttpClient简介 HttpClient是一个功能丰富的HTTP客户端API,它支持各种HTTP协议特性,如HTTP/1.1、连接管理、重定向处理、cookies、...

    Java爬虫信息抓取的实现 完整实例(源码)

    在Java中,我们通常使用HttpURLConnection或Apache HttpClient库来发送HTTP请求,获取网页内容。此外,Jsoup库是一个非常实用的HTML解析工具,它提供了方便的API来解析和操作HTML文档。 二、HttpURLConnection与...

    java爬虫项目,webmagic源码 java开发爬虫项目

    WebMagic支持多种下载器,如HttpURLConnection、HttpClient和OkHttp,你可以根据需求选择合适的下载器。 3. **Scheduler**:调度器管理待抓取的URL队列,决定下一个要抓取的URL。它可以是简单的URL队列,也可以是...

    ONEnet的一些接口类和api

    本文将详细介绍ONEnet的一些接口类和API,以及如何使用它们来与Java Web应用程序进行整合。 首先,ONEnet平台提供了RESTful API,允许开发者通过HTTP/HTTPS协议发送请求来获取或操作数据。这些接口主要包括设备管理...

    Java实现爬虫,自动爬取图片

    2. **发送HTTP请求**:使用HttpURLConnection或HttpClient向目标URL发送GET请求,获取HTML响应。 3. **解析HTML**:用Jsoup解析响应的HTML内容,找到所有`&lt;img&gt;`标签。 4. **提取图片URL**:从`&lt;img&gt;`标签中提取`src...

    网络爬虫 java版

    在Java中实现网络爬虫,可以利用各种库和框架,如Jsoup、HttpURLConnection、Apache HttpClient等。本项目是基于Java的网络爬虫,专注于抓取门户网站的新闻内容,提供了一个方便快捷的数据采集方案。 首先,我们来...

    java调用api的方法

    例如,对于OAuth2,可以使用HttpURLConnection或HttpClient库中的相关API设置Authorization Header。 5. **异常处理**:在调用API时,可能会遇到网络错误、超时或服务器返回的错误状态码。Java中应捕获和处理这些...

    android 网路请求

    在Android开发中,进行网络请求是应用程序与服务器...在实际项目中,我们需要根据需求选择HttpURLConnection、HttpClient、Volley、Retrofit或OkHttp等工具,并注意遵循Android的多线程规则、权限管理以及安全性原则。

    JAVA利用飞信接口发送短信

    3. **发送请求**:使用HttpURLConnection或者HttpClient库发送请求,并获取服务器的响应。确保正确处理HTTP状态码,例如200表示成功,其他可能表示失败或异常。 4. **解析响应**:服务器返回的响应可能包含发送结果...

    《Java开发手册》-嵩山版.zip

    - HTTP客户端:可能提到了HttpURLConnection或HttpClient的使用,以及如何进行HTTP请求。 7. **数据库访问** - JDBC:可能涉及了JDBC的基本操作,如连接、查询、事务处理等,以及最佳实践。 - ORM框架:可能推荐...

    网络机器人Java编程指南

    Java的HttpURLConnection和HttpClient类库提供了与Web服务器交互的基本功能。此外,对于更复杂的任务,如模拟登录和处理JavaScript动态内容,可能需要使用如Jsoup或Selenium等第三方库。 网络机器人的重要组成部分...

    android利用httppost实现和服务器的通讯

    首先,需要在Android项目中引入HttpURLConnection或HttpClient库,这里以HttpClient为例,添加以下依赖(如果使用Android Studio,可能需要在build.gradle文件中添加对应版本的 HttpClient 库): ```groovy ...

    解决了中文乱码的http的get和post请求demo

    Java的HttpURLConnection或HttpClient类都可以处理POST请求。在使用HttpURLConnection时,需要设置请求头`Content-Type`为`application/x-www-form-urlencoded;charset=UTF-8`,确保服务器知道数据的编码方式。示例...

    Java爬虫案例

    在这个“Java爬虫案例”中,我们可以预期看到如何配置和使用HttpURLConnection或HttpClient库发送HTTP请求,以及如何结合Jsoup解析HTML内容。可能还会涉及线程管理和任务调度,因为大型爬虫项目通常需要并行处理多个...

    JSP采集 JSP小偷程序

    因此,使用JSP采集和小偷程序时,必须遵守法律法规,尊重网站的robots.txt规则,合理控制抓取频率,确保不会对目标网站造成不良影响。 5. **webapps文件夹** 在提供的文件名列表中,我们看到了"webapps"。在Java ...

    用java客户端程序模拟校园网网页认证

    在Java中,我们可以使用HttpURLConnection或HttpClient类来模拟这些网络交互。 **使用HttpURLConnection** `HttpURLConnection`是Java标准库的一部分,适用于简单HTTP请求。首先,我们需要构建一个包含用户名和...

    Android源码——蓝虫火车票余票查询源码.7z

    在资源管理上,Android应用需要遵循一定的规则,如使用Strings.xml文件存储字符串资源,dimens.xml文件管理尺寸,以及styles.xml定义主题样式。图片资源可能被优化以减少应用大小,如使用webp格式或通过Android ...

    java中文乱码解决之道(8)解决URL中文乱码问题Jav

    4. **HttpURLConnection和HttpClient**:如果你在处理HTTP请求,`HttpURLConnection`或`Apache HttpClient`库也可能涉及URL编码。确保在设置请求参数时,使用正确的字符集: - 对于`HttpURLConnection`,你可以...

Global site tag (gtag.js) - Google Analytics