HttpClient用Post和Get带参数提交帮助类

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
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.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
* 基于 httpclient 的 http工具类
*
* @author mcSui
*
*/
public class HttpTookit {

private static final CloseableHttpClient httpClient;
public static final String CHARSET = "UTF-8";
static {
    RequestConfig config = RequestConfig.custom().setConnectTimeout(60000).setSocketTimeout(15000).build();
    httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
}

/**
 * HTTP Get 获取内容
 * @param url请求的url地址 ?之前的地址
 * @param params请求的参数
 * @param charset编码格式
 * @return 页面内容
 */
public static String sendGet(String url, Map<String, Object> params) {
     if(!StringUtils.hasText(url)){
     return "";
     }
    try {
        if (params != null && !params.isEmpty()) {
            List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size());
            for (String key : params.keySet()) {
                    pairs.add(new BasicNameValuePair(key, params.get(key).toString()));
            }
            url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, CHARSET));
        }
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = httpClient.execute(httpGet);
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            httpGet.abort();
            throw new RuntimeException("HttpClient,error status code :" + statusCode);
        }
        HttpEntity entity = response.getEntity();
        String result = null;
        if (entity != null) {
            result = EntityUtils.toString(entity, "utf-8");
        }
        EntityUtils.consume(entity);
        response.close();
        return result;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * HTTP Post 获取内容
 * @param url请求的url地址 ?之前的地址
 * @param params请求的参数
 * @param charset编码格式
 * @return 页面内容
 */
public static String sendPost(String url, Map<String, Object> params) {
     if(!StringUtils.hasText(url)){
         return "";
         }
    try {
        List<NameValuePair> pairs = null;
        if (params != null && !params.isEmpty()) {
            pairs = new ArrayList<NameValuePair>(params.size());
            for (String key : params.keySet()) {
                pairs.add(new BasicNameValuePair(key, params.get(key).toString()));
        }
        }
        HttpPost httpPost = new HttpPost(url);
        if (pairs != null && pairs.size() > 0) {
            httpPost.setEntity(new UrlEncodedFormEntity(pairs, CHARSET));
        }
        CloseableHttpResponse response = httpClient.execute(httpPost);
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            httpPost.abort();
            throw new RuntimeException("HttpClient,error status code :" + statusCode);
        }
        HttpEntity entity = response.getEntity();
        String result = null;
        if (entity != null) {
            result = EntityUtils.toString(entity, "utf-8");
        }
        EntityUtils.consume(entity);
        response.close();
        return result;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

}

在使用HttpClient发送POST请求时,可以通过不同的方式来参数。一种方式是将参数拼接到请求路径中,似于"http:localhost/upload?key=value"的方式。可以使用NameValuePair和UrlEncodedFormEntity来实现。首先,创建一个List<NameValuePair>对象,将参数名和参数值添加到该对象中。然后,创建一个HttpPost对象,设置请求路径,并将参数列表和编码方式传递给UrlEncodedFormEntity对象,最后将UrlEncodedFormEntity对象设置为HttpPost的实体。示例代码如下所示:\[1\] 另一种方式是通过请求体携参数提交。可以直接创建一个HttpPost对象,设置请求路径,然后执行HttpPost请求。示例代码如下所示:\[2\] 还有一种方式是通过URIBuilder来构建参数的请求路径,然后创建一个HttpPost对象,将构建好的URI传递给HttpPost对象。示例代码如下所示:\[3\] 以上是三种常见的使用HttpClient发送POST请求参数的方式。根据具体的需求和场景,选择适合的方式来发送POST请求参数。 #### 引用[.reference_title] - *1* *3* [java关于httpclient通过Post请求携请求参数的说明](https://blog.csdn.net/daxues_/article/details/120670737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java使用HttpClient发送GET和POST参数)请求](https://blog.csdn.net/YOU_hunter/article/details/102655511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值