Tag: apache httpcomponents

如何使用HttpComponents发布数组参数

我想用Apache http-components(4.1.2)执行此命令 curl –data “strings[]=testOne&string-keys[]=test.one&strings[]=testTwo&string-keys[]=test.two&project=Test” https://api.foo.com/1/string/input-bulk 目标api需要字符串和字符串键参数作为数组 ,这意味着为每个参数重复字符串[]和字符串键[] 。 这个curl命令工作正常,但是使用Http组件,而我得到了完全相同的参数。 也许我做错了什么。 List params = new ArrayList(); params.add( new BasicNameValuePair( “project”, PROJECT_NAME ) ); for ( Entry entry : newEntries ) { params.add( new BasicNameValuePair( “string-keys[]”, entry.getKey() ) ); params.add( new BasicNameValuePair( “strings[]”, entry.getValue() ) ); params.add( new BasicNameValuePair( “context[]”, “” ) ); } URI uri […]

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

我正在使用Apache httpcomponents Java库获取一个网页。 连接结果后,我得到一个HttpEntity ,它有一个方法getContent() ,它返回一个InputStream ,还有一个写入OutputStream的方法writeTo() 。 我想将结果转换为String以提取信息。 最优雅(和安全)的方法是什么? 一些可能的方案: 写入ByteArrayOutputStream ,然后使用String构造函数将这些字节转换为String 使用InputStreamReader直接从流中读取,并放入StringBuilder 这些都感觉有点难看。 你会建议选择其中一种还是别的?

如何使用Apache HttpComponentst创建和发布多部分/混合http请求?

我正在使用Apache HttpComponents v4.3.3(maven httpclient和httpmime)。 我需要上传一个包含一些元数据的文件。 curl命令可以工作,如下所示。 curl -k -i -H“Content-Type:multipart / mixed”-X POST –form’field1 = val1′-form’field2 = val2′-form’file =@somefile.zip; type = application / zip’https://www.some.domain/ 我试过模仿这个curl的post如下。 HttpEntity entity = MultiPartEntityBuilder .create() .addPart(“field1”,new StringBody(“val1”,ContentType.TEXT_PLAIN)) .addPart(“field2”,new StringBody(“val2”,ContentType.TEXT_PLAIN)) .addPart(“file”, new FileBody(new File(“somefile.zip”), ContentType.create(“application/zip”)) .build(); HttpPost post = new HttpPost(“https://www.some.domain”); post.addHeader(“Content-Type”, “multipart/mixed”); 但是,在我使用HttpClient执行HttpPost之后,我得到以下exception(服务器代码也是在Jetty上运行的Java)。 org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界 当我添加一个曲线curl curl –trace – -k -i […]

HttpComponents PoolingHttpClientConnectionManager maxPerRoute和maxTotal?

有人可以向我解释一下setMaxPerRoute(max)和setMaxTotal(max)在引用HttpComponents PoolingHttpClientConnectionManager时做了什么?

强制重试特定的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 HttpComponents:org.apache.http.client.ClientProtocolException

所以我使用apache HttpComponents来处理java中的http请求。 现在我想重用DefaultHttpClient ,这个例子应该是可能的: http ://wiki.apache.org/HttpComponents/QuickStart。 示例本身给出了一个ssl错误,因此我对其进行了修改和简化。 现在我总是得到一个org.apache.http.client.ClientProtocolException 这是我的示例程序,基本上我只是使用相同的DefaultHttpClient请求2个网页。 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class ClientFormLogin { public static void main(String[] args) throws Exception { DefaultHttpClient httpclient = new DefaultHttpClient(); //Handle first request. HttpGet httpget = new HttpGet(“http://tweakers.net/nieuws/82969/amazon-nederland-opent-digitale-deuren-in-september.html”); HttpResponse response = httpclient.execute(httpget); System.out.println(“Execute finished”); HttpEntity […]

要传递给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处理下载

如何在Java中使用HttpResponse处理下载? 我向特定站点发出了HttpGet请求 – 该站点返回要下载的文件。 我该如何处理这个下载? InputStream似乎无法处理它(或者我可能以错误的方式使用它。)

如何找到mimetype的响应

我正在处理使用Apache HTTP客户端发出的GET请求(v4-最新版本;而不是旧版本的v3)… 我如何获得响应的mimetype? 在apache http客户端的旧v3中,使用以下代码获取mime类型 – String mimeType = response.getMimeType(); 如何使用apache http客户端的v4获取mimetype?

带有httpClient的SSLPeerUnverifiedException

我正在尝试使用自签名证书测试安全的http连接…仅用于开发目的。 但是我无法解决对等体未经过身份validation的exception,当然我已经查看了有关此exception的类似post,以下是我正在使用的当前实现: public class SelfCertificatesSocketFactory extends SSLSocketFactory { SSLContext sslContext = SSLContext.getInstance(“TLS”); public SelfCertificatesSocketFactory(KeyStore trustStore) throws NoSuchAlgorithmException,UnrecoverableKeyException,KeyStoreException,KeyManagementException { super(trustStore); TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; } @Override […]