Tag: apache httpclient 4.x

如何在java中设置SSL协议版本? 我怎么知道哪一个? javax.net.ssl.SSLException:收到致命警报:protocol_version

我正在使用Apache HttpClient 4.3与hubic.com的API进行交互。 我的最小可重复示例只是一个内衬: HttpClientBuilder.create().build().execute(new HttpGet(“https://hubic.com”)); 然而,抛出: Exception in thread “main” javax.net.ssl.SSLException: Received fatal alert: protocol_version at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1991) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1104) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:275) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:254) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:117) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) 如果我使用System.setProperty(“javax.net.debug”, […]

强制重试特定的http状态代码

处理特定网站时,有时我收到状态代码为403的http响应。我想在这种情况下重新执行请求(因为,在我的特定情况下,此服务器在实际超载时会抛出403)。 我尝试将ResponseHandler与StandardHttpRequestRetryHandler一起使用,但它没有按照我希望的方式工作; 我期望在ResponseHandler中抛出exception会触发StandardHttpRequestRetryHandler ,但似乎并非如此。 如何实现所需的function? 这是一个示例代码,说明了我的情况: import java.io.IOException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.StandardHttpRequestRetryHandler; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; public class Main { public static void main(String[] args) throws Exception { // a response handler that throws an exception if status is not 200 ResponseHandler responseHandler […]

使用apache httpClient客户端将发布数据发送到https而不使用ssl证书validation

我需要使用apache HttpClient包将发布数据发送到httpsurl, 在发送post数据后,我需要检索html数据。 我发送的post数据是一个XML字符串,我收到的post数据是一个XML字符串。 任何有关该问题的信息将不胜感激。 我用谷歌搜索,我在互联网上找到了使用DefaultHttpClient的示例,现在版本4已弃用。 所以我想知道如何正确使用新版本的客户端。 谢谢。 更新 public String sendPost(final String request, final String postData) throws ClientProtocolException, IOException { String result = null; CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(request); CloseableHttpResponse response = httpclient.execute(httpPost); try { HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity); EntityUtils.consume(entity); } finally { response.close(); } return result; […]

如何 – Spring IoC和HttpClient 4.3.1 CloseableHttpClient?

我想让Spring IoC配置一个CloseableHttpClient对象并将其注入我的类中,以便可以通过XML完成其配置的自定义。 从我所看到的, HttpClient似乎非常强烈地抵制这种模式。 他们希望你做的事情 CloseableHttpClient chc = HttpClients.custom().set().build(); 伊克。 是不是有一些机制可以制作一个我可以使用的单例CloseableHttpClient bean?

为什么我得到一个exceptionjavax.net.ssl.SSLPeerUnverifiedException:peer未经过身份validation?

我正在使用Apache HttpComponents HttpClient(4.0.1)进行HTTPS调用,但我将此exception作为响应: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:345) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) 我提供了所有必需的参数。 目标系统不需要任何用户名/密码或代理,但它包含安装在服务器中的JKS证书。 用户名和密码是空值。 这与org.apache.commons.httpclient.methods.PostMethod一起使用 – 版本3.0 – commons-httpclient-3.0.jar现在我们用org.apache.http.client.methods.HttpPost实现了 – 版本4.0.1 – commons- httpclient.jar 这是不起作用的示例代码段: HttpParams param = new BasicHttpParams(); HttpProtocolParams.setVersion(param, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(param, “UTF-8”); HttpProtocolParams.setUseExpectContinue(param, true); DefaultHttpClient […]

如何创建异步缓存http客户端?

使用org.apache.httpcomponents:httpasyncclient-cache:4.1.3库,我试图弄清楚如何创建asynchronous caching http客户端? 我可以使用各自的构建器单独创建每个,但我找不到两种方法。 例如 CloseableHttpClient client = CachingHttpClientBuilder.create() .setCacheConfig(cacheConfig()) .build(); CloseableHttpAsyncClient build = HttpAsyncClientBuilder.create() .build(); Por que no los dos? 注意我并不依赖于这个版本的库 – 很高兴使用最新版本的解决方案。 有关: 如何像浏览器一样实现客户端http缓存?

java filechannel cpu用法随着时间的推移而增长

我正在使用java nio filechannel transferFrom函数和Apache httpclient从Internet下载文件。 它正常启动但一段时间后cpu使用量突然增长。 并且下载速度降低并最终变为零。 try (CloseableHttpResponse response = client.execute(get); ReadableByteChannel inputChannel = Channels.newChannel( response.getEntity().getContent())) { while (start < end && currentState.get() == 1) { delta = fileChannel.transferFrom(inputChannel, start, 8192); start += delta; bytesDone.addAndGet(delta); intialState.set(name, start); } } 由于声誉低,Sry无法发布图像

使用Apache HttpClient的Java HTTPPost请求

我需要一个java程序来生成以下请求。 我正在使用Apache HttpClient库,但仍然无法生成这样的请求: 这是我的python程序生成的,我写了一个等效的java程序。 但它的投掷403。 2012-09-10 15:12:05G INFO:G2OAuth auth data =“3,0.0.0.0,0.0.0.0,1347289925,3223833979,crlakamai”2012-09-10 15:12:05G INFO:G2OAuth sign string =“ 3,0.0.0.0,0.0.0.0,1347289925,3223833979,akamai / 182228 \ nx-akamai-acs-action:version = 1&action = dir&format = xml \ n“ send: ‘POST /182228 HTTP/1.1\r\nHost: crl.api.akamailab.com\r\nAccept-Encoding: identity\r\nX-Akamai-ACS-Auth-Data: 3, 0.0.0.0, 0.0.0.0, 1347289925, 3223833979, crlsymc\r\nX-Akamai-ACS-Auth-Sign: eFnWtJBIyj4rxV3V0axF3w==\r\nX-Akamai-ACS-Action: version=1&action=dir&format=xml\r\n\r\n’ reply: ‘HTTP/1.1 200 OK\r\n’ header: Server: Apache header: Content-Type: text/html header: Date: […]

要传递给Java应用程序以使用http代理进行身份validation的Java属性

我有一个Java应用程序试图通过http代理访问Web服务。 Java应用程序是我们无法访问源代码的第三方应用程序。 可以通过传递Java启动参数来配置它的启动。 我想知道一个人可以传递的java属性是什么,以便应用程序可以使用登录用户的NTLM凭据来validation代理连接? 当我通过https.proxyHost和https.proxyPort(即-Dhttps.proxyHost = abcd …到jvm命令行)时,我确实看到了日志的不同。 现在它失败了,下面有消息。 [WrapperSimpleAppMain] [AuthChallengeProcessor] ntlm authentication scheme selected INFO | jvm 5 | 2015/06/03 14:49:25 | 2015-06-03 14:49:25,380 INFO [WrapperSimpleAppMain] [HttpMethodDirector] No credentials available for NTLM @proxy.ins.dell.com:80 INFO | jvm 5 | 2015/06/03 14:49:25 | Exiting due to fatal exception. INFO | jvm 5 | 2015/06/03 14:49:25 | […]

如何在Java中更改HTTP响应中的字符集编码

我必须从远程服务器获取一些JSON对象,为此我正在使用这个function很好,除了有时一些奇怪的数据被提取,我相信是因为它使用ASCII字符集进行解码。 请在下面找到我正在使用的方法 public HttpResponse call(String serviceURL,String serviceHost,String namespace,String methodName,String payloadKey, String payloadValue) throws ClientProtocolException,IOException,JSONException { HttpResponse response = null; HttpContext HTTP_CONTEXT = new BasicHttpContext(); HTTP_CONTEXT.setAttribute(CoreProtocolPNames.USER_AGENT, “Mozilla/5.0”); HttpPost httppost = new HttpPost(serviceURL); httppost.setHeader(“User-Agent”,Constants.USER_AGENT_BROWSER_FIREFOX); httppost.setHeader(“Accept”, “application/json, text/javascript, */*”); httppost.setHeader(“Accept-Language”,”en-US,en;q=0.8″); httppost.setHeader(“Content-Encoding”, “foo-1.0”); httppost.setHeader(“Content-Type”, “application/json; charset=UTF-8”); httppost.setHeader(“X-Requested-With”,”XMLHttpRequest”); httppost.setHeader(“Host”,serviceHost); httppost.setHeader(“X-Foo-Target”, String.format(“%s.%s”, namespace,methodName)); /*Making Payload*/ JSONObject objectForPayload = new JSONObject(); objectForPayload.put(payloadKey, […]