标签: apache-httpcomponents

在httpclient中,将HttpEntity转换为String的最优雅/正确的方法是什么?

我正在使用Apache httpcomponents Java库获取一个网页.连接结果后,我得到的是一个返回an HttpEntity的方法getContent(),InputStream并且还有一个writeTo()写入OutputStream的方法.

我想将结果转换为String以提取信息.最优雅(和安全)的方法是什么?

一些可能的解决方

  • 写入a ByteArrayOutputStream然后使用String构造函数将这些字节转换为String
  • 使用InputStreamReader直接从流中读取,并放入StringBuilder

这些都感觉有点难看.你会建议选择其中之一吗?

java apache-httpcomponents

5
推荐指数
2
解决办法
2255
查看次数

使用apache http组件监控下载进度

我有一些大文件可以下载Apache的Http组件,我希望能够在我的网络应用程序的管理控制台中向用户显示一些进度信息.使用此库监视正在进行的下载的正确方法是什么?我将创建一个单例来管理正在进行的下载,我需要的是一种检查开放连接并找出它们在任何给定时间的位置的方法.

java apache-httpcomponents apache-httpclient-4.x

5
推荐指数
1
解决办法
2639
查看次数

如何为Http Delete方法设置RequestBody.

我正在编写一个删除API的服务器的客户端代码.API规范要求发送数据.我正在使用HttpComponents v3.1库来编写客户端代码.使用HtpDelete类我找不到向它添加请求数据的方法.有办法吗?以下是代码段.

        HttpDelete deleteReq = new HttpDelete(uriBuilder.toString());
    List<NameValuePair> postParams = new ArrayList<NameValuePair>();
    postParams.add(new BasicNameValuePair(RestConstants.POST_DATA_PARAM_NAME, 
            postData.toString()));
    try {
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams);
        entity.setContentEncoding(HTTP.UTF_8);
        //deleteReq.setEntity(entity); // There is no method setEntity()
        deleteReq.setHeader(RestConstants.CONTENT_TYPE_HEADER, RestConstants.CONTENT_TYPE_HEADER_VAL);
    } catch (UnsupportedEncodingException e) {
        logger.error("UnsupportedEncodingException: " + e);
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

http httpclient http-delete apache-httpcomponents

5
推荐指数
2
解决办法
4744
查看次数

使用Google Gson库时获取java.lang.NoClassDefFoundError

Gson library用来将对象转换为对象,Json反之亦然。我已jars将该库的复制到一个新文件夹中lib,并将其添加到我的项目中的构建路径中Eclipse IDE

我有一个主类,在其中我将对象转换为Json,toJson()如下所示,并将其发送给servletusing Apache HttpClient's HttpPost()

Gson gson= new Gson();
String json = gson.toJson(names);
Run Code Online (Sandbox Code Playgroud)

但是在执行以下代码时,我servlet无法将转换JsonObjectusing fromJson()

Gson gson = new Gson();
Names names = gson.fromJson(s, Names.class);
Run Code Online (Sandbox Code Playgroud)

它引发以下异常:

java.lang.NoClassDefFoundError: com/google/gson/Gson
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?我应该将拷贝jarsWebContent/WEB-INF/lib文件夹中而不是将新文件夹复制到lib吗?

eclipse classpath gson apache-httpcomponents apache-httpclient-4.x

5
推荐指数
1
解决办法
2万
查看次数

我是否需要在Apache HTTPAsyncClient中关闭过期的连接?

我是否需要像使用HttpClient一样关闭Apache HttpAsyncClient中的过期连接?

connection apache-httpcomponents

5
推荐指数
1
解决办法
1228
查看次数

MultipartEntityBuilder:省略内容类型和内容传输

我正在尝试使用org.apache.http.entity.mime.MultipartEntityBuilder在multipart/form-data POST请求上模仿我的浏览器行为

我的浏览器只发送Content-Disposition,但没有Content-Type或Content-Transfer-Encoding Headers.我尝试使用MultipartEntityBuilder.addPart()和addTextBody(),但默认情况下都添加了这些Headers:

我想要的(我的Chrome浏览器的功能):

POST .../some.jsp HTTP/1.1
Host: ...
Connection: keep-alive
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6tcnkxC7txvqE5Xl


------WebKitFormBoundary6tcnkxC7txvqE5Xl
Content-Disposition: form-data; name="merkmal"

5
Run Code Online (Sandbox Code Playgroud)

我从MultipartEntityBuilder得到了什么

POST.../some.jsp HTTP/1.1
Host: ...
Content-Type: multipart/form-data; boundary=m9Zb2QD-QaH-j-HqgGQfI8KwDkToz17ULYkZ

--m9Zb2QD-QaH-j-HqgGQfI8KwDkToz17ULYkZ
Content-Disposition: form-data; name="merkmal"
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

5
Run Code Online (Sandbox Code Playgroud)

为什么?:指定的服务器认为name ="merkmal"之后的所有内容都是merkmal(包括Headers)的值.其他可能的原因:整个请求可能有某种错误的编码(特别是换行)?

java apache-httpcomponents

5
推荐指数
1
解决办法
1991
查看次数

如何使用Apache HttpClient启用SSLv3?

从版本4.3.6开始,Apache HttpClient中禁用了SSLv3 ,但我使用的是版本4.5.该开发者写道:

那些希望继续使用SSLv3的用户需要明确启用对它的支持.

我试图在JVM级别设置支持的协议,但它不起作用.示例是在Scala中,但这与问题无关:

System.setProperty("https.protocols", "SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2")
Run Code Online (Sandbox Code Playgroud)

我的第二次尝试是这样的:

val instance: CloseableHttpClient = {
  val trustStrategy = new TrustStrategy {
    override def isTrusted(x509Certificates: Array[X509Certificate], s: String) = true
  }
  val sslContext = new SSLContextBuilder().loadTrustMaterial(null, trustStrategy).build()
  val sslSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE)
  val socketFactoryRegistry =
    RegistryBuilder.create[ConnectionSocketFactory]()
        .register("http", PlainConnectionSocketFactory.getSocketFactory)
        .register("https", sslSocketFactory)
        .build()
  val connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry)
  HttpClients.custom()
      .disableRedirectHandling()
      .setSSLContext(sslContext)
      .setConnectionManager(connectionManager)
      .build()
}
Run Code Online (Sandbox Code Playgroud)

但它也没有用.

如何使用Apache HttpClient 4.5连接支持SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2的主机?

java ssl https apache-httpcomponents apache-httpclient-4.x

5
推荐指数
1
解决办法
5618
查看次数

无法使用HttpClient获得“ location”标头作为响应

位置标题在那里,我可以在浏览器中看到它: 在此处输入图片说明

我正在使用org.apache.httpcomponents.httpclient发送带有cookie的http请求:

```

URI uri = new URIBuilder().setScheme("https").setHost("api.weibo.com").setPath("/oauth2/authorize").setParameter("client_id","3099336849").setParameter("redirect_uri","http://45.78.24.83/authorize").setParameter("response_type", "code").build();
HttpGet req1 = new HttpGet(uri);
RequestConfig config = RequestConfig.custom().setRedirectsEnabled(false).build();
req1.setConfig(config);
req1.setHeader("Connection", "keep-alive");
req1.setHeader("Cookie", cookie);
req1.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36");
response = httpclient.execute(req1);
Run Code Online (Sandbox Code Playgroud)

```

我在Google上搜索了很多,并尝试启用/禁用自动重定向,但是它似乎对我不起作用。

java http apache-httpcomponents

5
推荐指数
1
解决办法
1408
查看次数

Apache HttpClient 获取服务器证书

有没有办法在请求后使用 Apache HttpClient 获取经过身份验证的服务器的 SSL 证书 - 只是服务器端 request.getAttribute("javax.servlet.request.X509Certificate") 的对应项?

java http apache-httpcomponents apache-httpclient-4.x

4
推荐指数
1
解决办法
5339
查看次数

Spring可配置,高性能,计量的http客户端实例

来自DropWizard我已经习惯了它的HttpClientConfiguration,我很困惑,在Spring Boot中,我找不到一些支持以类似的方式控制http客户端实例,例如RestTemplates.

要在生产中工作,底层客户端实现应该是高性能的(例如,非阻塞io,具有连接重用和池化).

然后我需要设置超时或身份验证,可能是度量收集,cookie设置,SSL证书设置.

以上所有内容都应该很容易设置为不同的实例,以便在不同的上下文中使用不同的实例(例如,对于服务X使用这些设置和此池,对于Y使用另一个池和设置),大多数参数应该通过环境设置 - 在生产/ qa /开发中具有不同值的特定属性.

有没有可以用于此目的的东西?

configuration spring apache-httpcomponents dropwizard spring-boot

4
推荐指数
1
解决办法
8773
查看次数