HttpClient发送后台请求

由于API的不断更新,所以创建HttpClient对象和设置超时代理方式也会有细微区别

// 3.X版本
HttpClient httpClient=new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,2000);//连接超时时间,毫秒

//4.3版本
CloseableHttpClient httpClient = HttpClients.createDefault();

//或者使用HttpClientBuilder对象
// 创建HttpClientBuilder
HttpClientBuilder httpClientBuilder=HttpClientBuilder.create();
// HttpClient
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();  

//请求地址
HttpPost post = new HttpPost(url);
//设置代理和超时
RequestConfig config=RequestConfig.custom().setConnectionRequestTimeout(30000).setProxy(httpProxyHost).build();
post.setConfig(config);

详细变更请参考API文档,这里直接将实例

/**
 * web 请求/响应 API类
 */
public class WebUtil {

    /**
     * post 请求
     *
     * @param url
     *            请求路径
     * @param params
     *            请求参数
     * @return 请求返回
     */
    public String post(String url, List<BasicNameValuePair> params) {
        PayLog.addLog(ELogAction.Post, EPayLogType.PostRequest, new Object[] { url, params });

        if (CheckValue.valideteNullOrEmpty(url) || params == null || params.isEmpty()) {
            return "";
        }

        String result = "";
        ProxyUtil proxyUtil=HttpRequestHelper.getProxyUtil();

        // 创建HttpClientBuilder
        HttpClientBuilder httpClientBuilder=HttpClientBuilder.create();
        // HttpClient
        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
        //请求地址
        HttpPost post = new HttpPost(url);
        RequestConfig config=null;
        //如果需要设置代理
        if (proxyUtil.getIsEnable()) {
            HttpHost httpProxyHost=new HttpHost(proxyUtil.getHost(),proxyUtil.getPort(),"http");
            config=RequestConfig.custom().setConnectionRequestTimeout(30000)
                    .setProxy(httpProxyHost).build();
        }
        else
        {
            //超时时间设置为30s
            config=RequestConfig.custom().setConnectionRequestTimeout(30000).build();
        }
        //设置请求超时时间和有可能设置代理
        post.setConfig(config);
        try {
            post.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8));
            CloseableHttpResponse response = closeableHttpClient.execute(post);

            result = parseResponse(response.getEntity().getContent());
            PayLog.addLog(ELogAction.Post, EPayLogType.PostResponse, result);

            // 释放资源
            closeableHttpClient.close();
        } catch (Exception ex) {

            PayLog.addErrorLog(ELogAction.Post, EPayLogType.PostResponse, ex.getMessage());
            result = "未知错误,请联系客服!";
        }
        return result;
    }

    /**
     * 解析Response信息
     *
     * @param respStream
     *            response stream
     * @return
     */
    protected String parseResponse(InputStream respStream) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(respStream));
        StringBuilder sb = new StringBuilder();
        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                respStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

    /**
     * 将Response信息转为Json格式
     *
     * @param response
     *            eg:param1=v1&param2=v2&param3=v3 ...
     * @return
     */
    public String responseToJson(String response) {
        if (CheckValue.valideteNullOrEmpty(response)) {
            return "";
        }

        Map<String, String> map = new HashMap<String, String>();

        String[] responseParams = response.split("&");
        String key = "";
        String value = "";
        for (String string : responseParams) {
            String[] keyValues = string.split("=");
            if (keyValues != null && keyValues.length > 0) {
                key = keyValues[0];
            }

            if (keyValues != null && keyValues.length > 1) {
                value = keyValues[1];
            } else {
                value = "";
            }
            map.put(key, value);
        }
        Gson gson = new Gson();
        return gson.toJson(map);
    }

}
时间: 2024-10-01 03:24:37

HttpClient发送后台请求的相关文章

Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

[正文] 在前两篇文章中,我们学习到了和HTTP相关的基础知识.文章链接如下: Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 一.GET和POST的对比: 在漫长的时间当中,其他的方法逐渐的退出了历史舞台,最常用的只剩下GET和POST方法.而之前已经讲过了通过GET方法获取数据,今天来学习一下如何分别通过GET和POST获取数据. 举个例子:get类似于明信片,只有请求头,

fiddler 怎么监听HttpClient发送的请求

问题描述 fiddler 怎么监听HttpClient发送的请求 我用HttpClient模拟浏览器发送请求,但是fiddler 好像监听不到 HttpClient 发送的请求我用的是eclipse 有人说 用fiddler 上的那个十字标点中eclipse就行,但是我点了 也没用,我监听全局 fiddler也监听不了 HttpClient的请求 解决方案 设置一下代理就行了httpClient.getHostConfiguration().setProxy(""127.0.0.1&q

Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

[正文]  一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Internet上目前使用最广泛的应用层协议,它基于传输层的TCP协议进行通信,HTTP协议是通用的.无状态的协议. 这几个名词有一种通俗的解释: 通讯协议:双方对话的标准 通用的:用了都说好,谁用谁知道 无状态的:翻脸不认人 超文本:除了文本,还可以是音频.视频 HTTP协议与Android开发

我的Android进阶之旅------&amp;gt;Android发送GET和POST以及HttpClient发送POST请求给服务器响应

效果如下图所示:   布局main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent&qu

jsp使用HttpClient发送Post请求例子

司要将自己的产品封装一个WebService平台,所以最近开始学习使用Java发送Http请求的内容.这一块之前用PHP的时候写的也比较多,从用最基本的Socket和使用第三方插件都用过. 学习了Java两种方式,一种是用java.net.URLConnection,另一种则是大名鼎鼎的HttpClient.效率上没有做深入研究,使用java.net.URLConnection比较麻烦,而HttpClient就比较惬意.  代码如下 复制代码 java.net.URLConnection方法:

java使用httpclient发送post请求示例_java

复制代码 代码如下: package org.ssi.util; import java.io.IOException;import java.util.ArrayList;import java.util.List; import net.sf.json.JSONArray; import org.apache.commons.lang.exception.ExceptionUtils;import org.apache.commons.logging.Log;import org.apach

java中httpClient发送post请求的例子

 代码如下 复制代码 private HttpPost getHttpPost(String url, byte[] voiceContent,             int totalRetryTimes) {         HttpPost httpPost = new HttpPost(POST_URL);           httpPost.setHeader("Accept-Charset", "GBK");         httpPost.set

JAVA利用HttpClient进行POST请求(HTTPS)实例_java

最近,需要对客户的接口做一个包装,然后供自己公司别的系统调用,客户接口是用HTTP URL实现的,我想用HttpClient包进行请求,同时由于请求的URL是HTTPS的,为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程. 1.写一个SSLClient类,继承至HttpClient package com.pcmall.service.sale.miaomore.impl; import java.security.cert.CertificateExcept

RemoteObject在同一页面发送两次后台请求返回值处理

问题描述 项目是用的flex3+Spring3+hibernate3.6+blazeds,全用注解写的,在同一页面发送两次后台请求,总是报[RPC Fault faultString="java.lang.StackOverflowError : null" faultCode="Server.Processing" faultDetail="null"]错误,代码如下:<?xml version="1.0" encod