HttpClient4.X发送Get请求的url参数拼接

HttpClient4.X发送Get请求的参数拼接

使用httpClient发送get请求时,请求参数可以以?key=val&key1=val1的拼接到url后面。
但是请求参数较多时,这种方法比较麻烦,也不太优雅;研究了一下发现HttpClient4.X本身
是支持处理参数的。

1. 使用 URIBuilder来构建请求URI

httpclient相关的jar包mvn依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.3</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.1</version>
</dependency>
import com.google.common.collect.Lists;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
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.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

    private HttpGet buildHttpGet(String url, Map<String, String> para)
            throws URISyntaxException {
        URIBuilder builder = new URIBuilder(url);
        Set<String> set = para.keySet();
        for(String key: set){
            builder.setParameter(key, para.get(key));
        }
        HttpGet request = new HttpGet(builder.build());
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(6000)
                .setConnectTimeout(6000)
                .setConnectionRequestTimeout(6000).build();
        request.setConfig(requestConfig);
        System.out.println(request.getURI().toString());
        return request;
    }

2. 使用 NameValuePair 来拼接URI

List<NameValuePair> params = Lists.newArrayList();
params.add(new BasicNameValuePair("cityEname", "henan"));
String str = "";
//转换为键值对
str = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
System.out.println(str);
HttpGet httpGet = new HttpGet(url + "?" + str);

3. 根据 HttpGet反向获取键值对列表

HttpGet request = new HttpGet("http://example.com/?var=1&var=2");
URIBuilder newBuilder = new URIBuilder(request.getURI());
//获取键值对列表
List<NameValuePair> params = newBuilder.getQueryParams();
//转换为键值对字符串
String str = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
时间: 2024-10-09 13:52:06

HttpClient4.X发送Get请求的url参数拼接的相关文章

JavaScript获取后台C#变量以及调用后台方法 &amp;&amp; 获取请求的URL参数

一.当然我们可以在后台中获取参数的值,然后在前台js代码中获取变量的值,具体做法请参考下面JavaScript获取后台C#变量以及调用后台方法. 其实我们也可以直接在js中获取请求的参数的值,通过使用window.location.search可以获取到当前URL的?号开始的字符串,如前面的链接获取到的search为?id=001.再对获取的字符串进行处理,就可以获取到参数的值了. 复制代码 代码如下: 1 function getUrlParam(name) { 2 var reg = new

使用restClient工具发送post请求并带参数

运行 restClient 点 Method选项卡,选中post方法 然后切换到 Body选项卡,点右边的 倒三角,选 String body 出现如下窗口: 点击右边红圈里的按钮,弹出窗口: 点是,变为如下样式: 画线部分会自动变成如图所示,不用管,然后直接添加参数,点右侧红圈中的按钮添加参数即可. 原文地址:https://www.cnblogs.com/libin6505/p/9724251.html

c#发送post请求(带参数)

原文链接:https://blog.csdn.net/u011127019/article/details/51006495 加上get请求的:原文链接:https://blog.csdn.net/u011127019/article/details/53021164 原文地址:https://www.cnblogs.com/Mask71/p/12617867.html

Java发送POST请求,参数为JSON格式,并接收返回JSON数据

原文地址:https://blog.csdn.net/qq_26975307/article/details/82713725 /** * 发送post请求 * @param url 路径 * @param jsonObject 参数(json类型) * @param encoding 编码格式 * @return * @throws ParseException * @throws IOException */ public static String send(String url, JSO

Requests库发送post请求,传入接口参数后报JSON parse error

报错信息: {"timestamp":"2020-01-08T14:42:40.894+0000","status":400,"error":"Bad Request","message":"JSON parse error: Cannot deserialize instance of `java.util.ArrayList` out of VALUE_STRING tok

用IO流发送Http请求

package com.j1.mai.action; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.u

URL参数基础知识

URL参数 URL 参数是追加到 URL 上的一个名称/值对.参数以问号 (?) 开始并采用 name=value 的格式.如果存在多个 URL 参数,则参数之间用一个 (&) 符隔开.下面的示例显示带有两个名称/值对的 URL 参数: http://server/path/document?name1=value1&name2=value2 URL 参数可使您将用户提供的信息从浏览器传递到服务器.当服务器收到请求,而且参数被追加到请求的 URL 上时,服务器在将请求的页提供给浏览器之前,

JAVA发送HttpClient请求及接收请求结果过程

下面为本人自己在工作中写业务代码的,并不是通用的,只供自己下次使用时能有个查找地,及正处在困扰中的程序员借鉴. 推荐好点博客给大家看看: http://blog.sina.com.cn/s/blog_75a8cfac01013aim.html http://blog.csdn.net/fireelement/article/details/2497136 http://www.2cto.com/kf/201206/136879.html http://284772894.iteye.com/bl

jquery中的ajax请求用法以及参数详情

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项