Tag: httpclient

如何在底层连接有状态时使用Apache HttpClient?

我已经搜索了很多关于如何在multithreading中使用HttpClient的信息。 他们中的大多数建议使用ThreadSafeClientConnManager。 但我的应用程序必须登录一些主机(登录表单页面),以便HttpClient获得基础的有状态连接。 如果multithreading,ThreadSafeClientConnManager可以保持登录状态吗?

在重用apache httpclient时阻塞线程

我使用apache httpclient 4.3.4,我想在工作线程中重用httpclient实例,但是当httpclient第二次发布数据时线程被阻塞了。 class SinglePostConnectionThread extends Thread { void processResponse(CloseableHttpResponse response) throws Exception{ try{ StatusLine sLine = response.getStatusLine(); switch (sLine.getStatusCode()){ case 200:{ break; } case 204:{ //HttpEntity entity = response.getEntity(); //entity.getContent().close(); System.out.println(“No Flight”); break; } default: System.out.println(“Bad response”); } } catch (Exception e){ System.out.println(e.getMessage()); }finally { System.out.println(“Close response”); response.close(); } } @Override public void run() […]

正确使用Apache HttpClient以及何时关闭它。

我在servlet中使用HttpClient来调用一些资源,我在一些操作后作为servlets响应返回。 我的HttpClient使用PoolingHttpClientConnectionManager。 我像这样创建客户端: private CloseableHttpClient getConfiguredHttpClient(){ return HttpClientBuilder .create() .setDefaultRequestConfig(config) .setConnectionReuseStrategy(NoConnectionReuseStrategy.INSTANCE) .setConnectionManagerShared(true) .setConnectionManager(connManager) .build(); } 我在servlets服务方法中的Try With Resource中使用此客户端,因此它是自动关闭的。 要停止关闭连接管理器,我将setConnectionManagerShared设置为true。 我见过其他代码示例没有关闭HttpClient。 我不应该关闭这个资源吗? 谢谢

如何使用HTTPClient设置HTTP请求标头“身份validation”?

我想在向服务器发送POST请求时设置HTTP请求标头“授权”。 我如何用Java做到这一点? HttpClient对它有任何支持吗? http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z9 服务器要求我为授权字段设置一些特定值:表单ID:签名,然后他们将使用它来validation请求。 谢谢Ajay

HttpClient:如何从现有连接获取底层套接字?

我正在使用HttpClient 4.02通过代理创建连接(使用CONNECT方法)来连接到远程服务器的连接。 HttpClient非常方便,但我是API的新手,无法看到如何获取隧道连接的底层Socket 。 以下代码取自: http : //svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.0.1/httpclient/src/examples/org/apache/http/examples/client/ClientExecuteProxy.java // make sure to use a proxy that supports CONNECT HttpHost target = new HttpHost(“target.server.net”, 443, “https”); HttpHost proxy = new HttpHost(“some.proxy.net”, 8080, “http”); // general setup SchemeRegistry supportedSchemes = new SchemeRegistry(); // Register the “http” and “https” protocol schemes, they are // required by the default […]

HttpClient检查Kerberos安全网页。 NTLM登录无效

我必须编写一个程序来检查我们公司的Kerberos安全站点。 我尝试使用HttpClient并得到以下错误: KrbException: Server not found in Kerberos database (7) at sun.security.krb5.KrbTgsRep.(KrbTgsRep.java:61) at sun.security.krb5.KrbTgsReq.getReply(KrbTgsReq.java:185) … 我在5个月前写过一个NTLM登录,但它对这个Kerberos安全站点不起作用。 我认为Nego2已激活,因此如果Kerberos失败,它不会回退到NTLM。 我阅读了Kerberos Wikipedia文章: http : //en.wikipedia.org/wiki/Kerberos_(protocol) ,我认为问题是TGS在数据库中找不到所请求的服务。 我想这是因为我在错误之前得到了一张票(我认为它是TGT)。 Found ticket for userid@EXAMPLE.COM to go to krbtgt/EXAMPLE.COM@EXAMPLE.COM expiring on Thu May 31 01:35:56 CEST 2012 所以错误发生在“客户服务授权” – > 2.(参见维基百科文章) 问题是服务必须在kerberos数据库中,因为我可以使用IE访问它(没有登录,所以单点登录工作)。 所以我的问题是:为什么TGS在Kerberos数据库中找不到服务器,但它适用于IE? 额外的信息 我试图在顶部获得必要的信息,但这里是所有信息,因为我不知道我是否得到了所有必要的信息: 操作系统是Windows 7 Firefox版本9.0.1 Chrome版本19.0.1084.52 Safari版本5.0.2 IE版本8.0.7600.16385 我的Java代码: […]

如何从HttpURLConnection切换到HttpClient

这是我的第一个问题,所以拜托,请耐心等待。 我有一个Swing应用程序,它通过HttpURLConnection从服务器获取XML格式的数据。 现在我正在尝试与服务器创建一个持续的请求 – 响应连接,以检查应用程序是否有任何更新(因为检查必须定期和经常(每隔一秒左右))。 在一些问题的评论中,我读到最好使用Apache HttpClient而不是HttpURLConnection来维护实时连接,但我找不到任何好的例子如何从我当前的代码转到使用HttpClient的代码。 具体来说,使用什么而不是HttpURLConnection.setRequestProperty()和HttpURLConnection.getOutputStream()? Document request = new Document(xmlElement); Document response = new Document(); String server = getServerURL(datasetName); try { URL url = new URL(server); try { HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestProperty(“Content-Type”,”application/xml; charset=ISO-8859-1″); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod(“POST”); OutputStream output = connection.getOutputStream(); XMLOutputter serializer = new XMLOutputter(); serializer.output(request, output); output.flush(); output.close(); InputStream input […]

HttpClient SSLException

我尝试将https请求发送到Web服务,并且在几次成功尝试之后,我开始一致地得到此错误。 这个错误意味着什么,为什么它会在第一次发生时发生。 javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1842) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1825) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1751) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:127) at org.apache.http.impl.io.AbstractSessionOutputBuffer.flushBuffer(AbstractSessionOutputBuffer.java:131) at org.apache.http.impl.io.AbstractSessionOutputBuffer.flush(AbstractSessionOutputBuffer.java:138) at org.apache.http.impl.io.ContentLengthOutputStream.flush(ContentLengthOutputStream.java:102) at org.apache.http.entity.StringEntity.writeTo(StringEntity.java:94) at org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:96) at org.apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.java:108) at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:120) at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:263) at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:227) at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:255) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123) at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:622) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:941) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:919) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:910) […]

获取响应获取或发布请求的响应字符集

我正在java web应用程序中提取响应字符集,我正在使用Apache HTTP Client。 例如,从“Content-Type”标题获得的一个可能值是 text/html; charset=UTF-8 然后我的代码将在“=”符号后提取所有文本… 所以提取的字符集将是 UTF-8 我只是想知道,上面获取响应字符集的方法是否正确? 或者是否存在上述代码不起作用的情况? 这里有什么我想念的吗?

HttpClient 4.2,基本身份validation和AuthScope

我有一个应用程序连接到需要基本身份validation的站点。 这些站点在运行时提供,在编译时不知道。 我正在使用HttpClient 4.2。 我不确定下面的代码是否应该如何指定基本身份validation,但文档会建议它。 但是,我不知道在AuthScope的构造函数中传递什么。 我原以为null参数意味着所提供的凭据应该用于所有URL,但它会抛出NullPointerException ,所以显然我错了。 m_client = new DefaultHttpClient(); UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(m_userName, m_password); ((DefaultHttpClient)m_client).getCredentialsProvider().setCredentials(new AuthScope((HttpHost)null), credentials);