文章目录
- 一、背景?
- 二、尝试的过程
- 1.postman(成功)
- 2.hutool(失败)
- 3.AsyncHttpClient(成功)
- 总结
一、背景?
最近项目中有个三方接口,需要使用get请求传递json,
这个让人有点懵,一般来说get参数都会直接拼接在url后, 复杂的参数都使用post方式传递, 尝试过程中发现postman可以正常请求,使用hutool工具请求却失败了,网上找了一圈,才摸索出了解决方案
二、尝试的过程
1.postman(成功)
截图如下(示例):
2.hutool(失败)
代码如下(示例):
HttpRequest get = HttpUtil.createGet(url + "api/token");Map<String, String> params = new HashMap<>();params.put("AppId", appId);params.put("AppKey", appKey);get.body(JSONObject.toJSONString(params), "application/json");get.execute();
上述代码会返回415(为什么明明是get,却提示415呢?),这里有意思的地方在于, 如果我去掉get.body() 这行代码, 他会正常返回没有参数的异常, 所以我推测是hutool在发现请求携带body时, 将get换成post方式了, 而且在fiddler中发现确实如此。
3.AsyncHttpClient(成功)
此处参考博客地址
废话不多说,代码如下
DefaultAsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();Map<String, String> params = new HashMap<>();params.put("AppId", appId);params.put("AppKey", appKey);Request r = new RequestBuilder().setUrl(url + "api/token").setBody(JSONObject.toJSONString(params)).addHeader("Content-Type", "application/json").build();ListenableFuture<Response> future = asyncHttpClient.executeRequest(r);Response response = future.get();asyncHttpClient.close();//工具版本<dependency><groupId>org.asynchttpclient</groupId><artifactId>async-http-client</artifactId><version>2.12.3</version></dependency>