关闭

HttpClient和URLConnection的应用

506人阅读 评论(3) 收藏 举报

       以前使用http连接都是网上百度个小demo然后拿来就用,对其并不是太了解,今天看了看这些东西,写下了,以防忘记

       大体说一下,URLConnection其实就是Java类,其中的API比较少,可以扩展性比较大。HttpClient可以把它看成一个框架,很多API。用起来方便。另外使用起来也很多种,下面复制一些代码,包括post和Get的方法。

httpClient的Get的请求:

public static String HttpGet(String url)  throws Exception{
    String jsonString = "";
    HttpClient client = new HttpClient(new HttpClientParams(), new SimpleHttpConnectionManager(true));
    client.getHttpConnectionManager().getParams().setConnectionTimeout(15000); //通过网络与服务器建立连接的超时时间
    client.getHttpConnectionManager().getParams().setSoTimeout(60000); //Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间
    GetMethod method = new GetMethod(url);
    method.setRequestHeader("Content-Type""text/html;charset=UTF-8");
    try {
        client.executeMethod(method);
        jsonString = method.getResponseBodyAsString();
    catch (Exception e) {
        jsonString = "error";
        logger.error("HTTP请求路径时错误:" + url, e.getMessage());
        throw e; // 异常外抛
    finally {
        if (null != method)
            method.releaseConnection();
    }
    return jsonString;
}


httpClient的POST的请求:

/**
 普通POST请求
 */
@SuppressWarnings("deprecation")
public static String HttpPost(String url, String body)  throws Exception{
    String jsonString = "";
    HttpClient client = new HttpClient(new HttpClientParams(), new SimpleHttpConnectionManager(true));
    client.getHttpConnectionManager().getParams().setConnectionTimeout(15000); //通过网络与服务器建立连接的超时时间
    client.getHttpConnectionManager().getParams().setSoTimeout(60000); //Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间
    PostMethod method = new PostMethod(url);
    method.setRequestHeader("Content-Type""text/html;charset=UTF-8");
    method.setRequestBody(body);
    try {
        client.executeMethod(method);
        jsonString = method.getResponseBodyAsString();
    catch (Exception e) {
        jsonString = "error";
        logger.error("HTTP请求路径时错误:" + url, e.getMessage());
        throw e; // 异常外抛
    finally {
        if (null != method)
            method.releaseConnection();
    }
    return jsonString;
}
/**
 JSON的POST请求
 */
@SuppressWarnings("deprecation")
public static String HttpPostJSON(String url, JSONObject body)  throws Exception{
    String jsonString = "";
    HttpClient client = new HttpClient(new HttpClientParams(), new SimpleHttpConnectionManager(true));
    client.getHttpConnectionManager().getParams().setConnectionTimeout(15000); //通过网络与服务器建立连接的超时时间
    client.getHttpConnectionManager().getParams().setSoTimeout(60000); //Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间
    client.getHttpConnectionManager().getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
    PostMethod method = new PostMethod(url);
    method.setRequestHeader("Content-Type""application/json;charset=UTF-8");
    method.setRequestBody(body.toString());
    try {
        client.executeMethod(method);
        jsonString = method.getResponseBodyAsString();
    catch (Exception e) {
        jsonString = "error";
        logger.error("HTTP请求路径时错误:" + url, e.getMessage());
        throw e; // 异常外抛
    finally {
        if (null != method)
            method.releaseConnection();
    }
    return jsonString;
}
/**
 XML的POST请求
 */
@SuppressWarnings("deprecation")
public static String HttpPostXml(String url, String xmlBody)  throws Exception{
    String result = "";
    HttpClient client = new HttpClient(new HttpClientParams(), new SimpleHttpConnectionManager(true));
    client.getHttpConnectionManager().getParams().setConnectionTimeout(15000); //通过网络与服务器建立连接的超时时间
    client.getHttpConnectionManager().getParams().setSoTimeout(60000); //Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间
    PostMethod method = new PostMethod(url);
    method.setRequestHeader("Content-Type""application/xml");
    if(null != xmlBody){
        method.setRequestBody(xmlBody);
    }
    try {
        client.executeMethod(method);
        result = method.getResponseBodyAsString();
    catch (Exception e) {
        result = "error";
        logger.error("HTTP请求路径时错误:" + url, e.getMessage());
        throw e; // 异常外抛
    finally {
        if (null != method)
            method.releaseConnection();
    }
    return result;
}


URLConnection 的Post的请求:

public static String sendPost(String url, String param)  throws Exception{
    PrintWriter out = null;
    BufferedReader in = null;
    String result = "";
    try {
        URL realUrl = new URL(url);
        URLConnection conn = realUrl.openConnection();
        conn.setConnectTimeout(5000);
        conn.setReadTimeout(10*1000);
        conn.setDoOutput(true); // 发送POST请求必须设置如下两行
        conn.setDoInput(true);
        out = new PrintWriter(conn.getOutputStream());
        out.print(param);
        out.flush();
        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = in.readLine()) != null) {
            result += line;
        }
    catch (Exception e) {
        logger.error("HTTP请求路径时错误:" + url, e.getMessage());
        throw e; // 异常外抛
    finally{
        try{
            if(out!=null)out.close();
            if(in!=null) in.close();
        }
        catch(Exception ex){
        }
    }
    return result;
}



另外还有一种HttpClient的请求方式,两者只是写法不一样而已。



import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

public class ww {
//    public static void main(String[] args) throws ClientProtocolException,
//            IOException {
//        String respContent = sendHttpGet();
        
//        JSONObject result = JSONObject.fromObject(respContent);
//        String success = result.getString("success");
//        JSONObject date = result.getJSONObject("data");
//        if (success=="true"||success.equals("true")){
//            System.out.print(respContent);
//        }else{
//        JSONObject result = JSONObject.fromObject(respContent);
//        JSONArray aa = result.getJSONArray("data");
//        JSONObject gg = (JSONObject) aa.get(0);
//;
//            System.out.print(gg.getString("fullName"));
//        }
        
//    }
    public static String sendHttpGet() throws ClientProtocolException, IOException{
        String strResult = null;
            StringBuffer paramBuff = new StringBuffer("");
            
            String newUrl = "http://localhost:8080/hssf/";
            // 发送请求
            CloseableHttpClient httpclient = HttpClients.createDefault();
            HttpGet request = new HttpGet(newUrl);
//            request.setHeader("_csrf_header","X-CSRF-TOKEN");
//            request.setHeader("_csrf","bf5131e5-63c3-44da-8d65-26bfb5bd38de");
            
            CloseableHttpResponse httpResponse = httpclient.execute(request);
            
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
            {  
                //取得返回的字符串  
                strResult = EntityUtils.toString(httpResponse.getEntity(),"UTF-8");  
            }  
            else
            {  
                System.err.print("请求错误!");
            }  
            
            return strResult;
    }
    
    public static String sendHttpr(String weChat, String content)
            throws ClientProtocolException, IOException {
        String strResult = null;

        // 使用NameValuePair来保存要传递的Post参数
//        String sign = content.substring(0, 1);
//        String meg = content.substring(1, content.length());
//        Map<String,String> map = new HashMap<String, String>();
//        map.put("FromUserName", "22452426");
//        map.put("ToUserName", "22452426");
//        map.put("Content", "T刘昊");
        
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // 添加要传递的参数

        params.add(new BasicNameValuePair("fromUserName", "de268"));
        params.add(new BasicNameValuePair("toUserName", "de268"));
        params.add(new BasicNameValuePair("content", "T刘昊"));
    
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // HttpPost连接对象
        HttpPost httpRequest = new HttpPost(
                "http://10.44.111.122:8080/WeChatRobot/weChatManager/wxText");

        // 设置字符集
        HttpEntity httpentity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
        // 请求httpRequest
        httpRequest.setEntity(httpentity);
        // 发送请求
        CloseableHttpResponse httpResponse = httpclient.execute(httpRequest);
        // 设置请求的参数 超时时间
        BasicHttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
        HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);

        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            // 取得返回的字符串
            strResult = EntityUtils.toString(httpResponse.getEntity(),
                    HTTP.UTF_8);
        } else {
            System.err.print("请求错误!");
        }
        return strResult;
    }

    public static String sendHttpPost(String weChat, String content)
            throws ClientProtocolException, IOException {
        String strResult = null;

        // 使用NameValuePair来保存要传递的Post参数
        String sign = content.substring(0, 1);
        String meg = content.substring(1, content.length());
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // 添加要传递的参数

        params.add(new BasicNameValuePair("weChat", weChat));
        params.add(new BasicNameValuePair("sign", sign));
        params.add(new BasicNameValuePair("fullName", meg));
        params.add(new BasicNameValuePair("content", content));
    
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // HttpPost连接对象
        HttpPost httpRequest = new HttpPost(
                "http://10.44.111.122:8080/weChat/weChatManager/wxText");

        // 设置字符集
        HttpEntity httpentity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
        // 请求httpRequest
        httpRequest.setEntity(httpentity);
        // 发送请求
        CloseableHttpResponse httpResponse = httpclient.execute(httpRequest);
        // 设置请求的参数 超时时间
        BasicHttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
        HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);

        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            // 取得返回的字符串
            strResult = EntityUtils.toString(httpResponse.getEntity(),
                    HTTP.UTF_8);
        } else {
            System.err.print("请求错误!");
        }
        return strResult;
    }
    /**
     *
     *
     */
    public static String searchUserResult(String weChat, String meg)
            throws ClientProtocolException, IOException {
        String strResult = null;

        // 使用NameValuePair来保存要传递的Post参数
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // 添加要传递的参数

        params.add(new BasicNameValuePair("weChat", "3353677656"));
        params.add(new BasicNameValuePair("fullName", "何镇镇"));
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // HttpPost连接对象
        HttpPost httpRequest = new HttpPost(
                "http://10.44.111.122:8080/Contact/weChat/wxGetuser");

        // 设置字符集
        HttpEntity httpentity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
        // 请求httpRequest
        httpRequest.setEntity(httpentity);
        // 发送请求
        CloseableHttpResponse httpResponse = httpclient.execute(httpRequest);
        // 设置请求的参数 超时时间
        BasicHttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
        HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);

        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            // 取得返回的字符串
            strResult = EntityUtils.toString(httpResponse.getEntity(),
                    HTTP.UTF_8);
        } else {
            System.err.print("请求错误!");
            
        }
        System.out.print("2222222+++++++++++++++++_________++++_______");
        return strResult;
    }
}

http://www.javacui.com/java/359.html
http://javacui.com/opensource/322.html
http://www.cnblogs.com/langtianya/p/4001499.html
这几个网站比较来看比较容易理解
至于服务器端就用Spring来实现就行。

0
0
查看评论

HttpURLConnection与HttpClient浅析

HttpURLConnection与HttpClient浅析1. GET请求与POST请求HTTP协议是现在Internet上使用得最多、最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源。在介绍HttpURLConnection前,我们还是再来说一下URL请求最常用的...
  • zhliro
  • zhliro
  • 2015-07-14 14:25
  • 4183

HttpClient和HttpURLConnection哪个更好

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12452307 最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Andr...
  • zhou_wenchong
  • zhou_wenchong
  • 2016-04-25 16:13
  • 1781

HttpClient和HttpURLConnection的使用和区别(下)

zhttp://lzyblog.com/2014/09/18/HttpClient%E5%92%8CHttpURLConnection%E7%9A%84%E4%BD%BF%E7%94%A8%E5%92%8C%E5%8C%BA%E5%88%AB-%E4%B8%8B/ 接着上一篇,我们继续...
  • xia215266092
  • xia215266092
  • 2014-09-25 17:07
  • 2320

HttpClient和HttpURLConnection的区别

最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客...
  • HGuang_ZJH
  • HGuang_ZJH
  • 2014-06-23 18:13
  • 47937

HttpClient和HttpURLConnection的使用和区别(上)

转自: 相信很多Android开发者碰到涉及到Http协议的需求时,都和我一样在犹豫是使用HttpClient还是使用HttpURLConnection呢。我在网上也搜索了很多文章,来分析两者的区别。接下来我们就剖析一下这两个网络开源库,分别从背景、用法、相同点、区别这几点来入手分析。 ...
  • xia215266092
  • xia215266092
  • 2014-09-25 17:06
  • 1811

HttpURLConnection和HttpClient的区别

安卓中访问网络方式: Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient。这两种方式都支持HTTPS协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能...
  • shenshizhong
  • shenshizhong
  • 2016-08-31 18:23
  • 614

Java网络连接之HttpURLConnection与HttpClient 区别及联系

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。   ...
  • xiaoxuanfeng1986
  • xiaoxuanfeng1986
  • 2014-10-29 10:58
  • 645

HttpURLConnection与HttpClient 区别及联系

ponseMessage():获取服务器的响应消息。String getResponseMethod():获取发送请求的方法。void setRequestMethod(String method):设置发送请求的方法。        在...
  • AlbertFly
  • AlbertFly
  • 2016-06-02 18:43
  • 710

HTTPClient和HttpURLConnection实例对比

HttpURLConnection是java的标准类,什么都没封装。 HTTPClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等。 简单来说,HTTPClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HTTPCl...
  • aqsunkai
  • aqsunkai
  • 2016-07-31 00:37
  • 2020

Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比

比较的指标: 1、cpu 2、流量 3、电量 4、内存占用 5、联网时间 功能点: 1、重试机制 2、提供的扩展功能 3、易用性 4、是否https 5、是否支持reflect api,OkHttp有配套方法 6、缓存、重试 7、cookie支持session  id会话...
  • zhangcanyan
  • zhangcanyan
  • 2016-06-30 22:33
  • 23690
    个人资料
    • 访问:9450次
    • 积分:311
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    最新评论