我需要将POST请求发送到包含gzip压缩请求参数的Web服务器。我使用的是Apache
HttpClient,我已经读到它支持开箱即用的Gzip,但是我找不到任何有关如何做我需要的示例。如果有人可以发布一些示例,我将不胜感激。
您需要先将其String
转换为gzip
byte[]
或(临时)File
。我们假设它不是一个很大的String
值,所以byte[]
对于可用的JVM内存足够安全:
String foo = "value";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) {
gzos.write(foo.getBytes("UTF-8"));
}
byte[] fooGzippedBytes = baos.toByteArray();
然后,可以使用HttpClient将其作为多部分主体发送,如下所示:
MultipartEntity entity = new MultipartEntity();
entity.addPart("foo", new InputStreamBody(new ByteArrayInputStream(fooGzippedBytes), "foo.txt"));
HttpPost post = new HttpPost("http://example.com/some");
post.setEntity(entity);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
// ...
请注意,HttpClient 4.1支持新功能ByteArrayBody
,其用法如下:
entity.addPart("foo", new ByteArrayBody(fooGzippedBytes, "foo.txt"));
是否可以将SSL代理与Java HttpClient(或任何其他客户端)一起使用? 我真正的问题是有一个直接的SSL代理来发送HTTP或HTTPS连接并检查SSL代理和客户端证书。 例如,对于HTTP请求(我们检查客户端上的SSL代理证书,以及代理上的客户端证书): 客户端---SSL套接字(HTTPS)--- 对于HTTPS请求(使用CONNECT request来隧道SSL连接)(我们检查客户
我在: > http://developer.yahoo.com/blogs/ydn/important-api-updates-changes-8060.html http://developer.yahoo.com/boss/search/ http://tech.groups.yahoo.com/group/ysearchboss/msearch?query=http要求 http://de
我正在创建一个数据下载程序,自从使用httpClient以来,它一直给我带来问题 此代码将所需的所有变量附加到URL: } 每当我调用openSession时,它都会以一种简单的方式打印出标题(这正是我需要它做的)。。。 这打印了一个单行,但当我提出另一个打印长行的请求时,它总是带来这个错误: 这是第二个出现错误的请求: 我在currencyPairsRequest()中是否做错了什么?谢谢你花时
我正试图通过新的Java11HttpClient取消http请求。 这是我的测试代码: 我预计,该请求任务将在 行调用后立即被取消。因此,控制台中最后打印的行应该是 但是,当我运行这段代码时,我看到类似这样的内容: 这意味着,在我取消请求后,请求任务仍在运行…所以,这是取消请求的正确方法吗? UPD 取消请求的正确方法是(正如daniel所建议的,UPD2:在方法调用中避免NPE):
目前面临的问题是,对Azure Search API的请求返回“未知错误”。 我拿到了request在postman中工作,并认为在Angular中使用Http客户端在理论上是相同的设置。 错误消息: 错误HttpErrorResponse 邮差回应: 还有一个错误: 预飞响应无效(重定向)
我需要一个java程序来生成以下请求。我正在使用Apache HttpClient Library,但仍然无法生成这样的请求: 这是我的python程序生成的,我编写了一个等效的java程序。但它扔403。 2012-09-10 15:12:05G信息:G2OAuth auth data=“3,0.0.0,0.0.0,1347289925,3223833979,crlakamai”2012-09-