标签: apache-httpclient-4.x

使用HttpClient通过HTTPS信任所有证书

最近发布了一个关于HttpClient过度Https 的问题(在这里找到).我已经取得了一些进展,但我遇到了新的问题.和我的上一个问题一样,我似乎无法找到适合我的任何地方的例子.基本上,我希望我的客户端接受任何证书(因为我只指向一个服务器),但我一直在接受javax.net.ssl.SSLException: Not trusted server certificate exception.

所以这就是我所拥有的:


    public void connect() throws A_WHOLE_BUNCH_OF_EXCEPTIONS {

        HttpPost post = new HttpPost(new URI(PROD_URL));
        post.setEntity(new StringEntity(BODY));

        KeyStore trusted = KeyStore.getInstance("BKS");
        trusted.load(null, "".toCharArray());
        SSLSocketFactory sslf = new SSLSocketFactory(trusted);
        sslf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme ("https", sslf, 443));
        SingleClientConnManager cm = new SingleClientConnManager(post.getParams(),
                schemeRegistry);

        HttpClient client = new DefaultHttpClient(cm, post.getParams());
        HttpResponse result = client.execute(post);
    }
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

    W/System.err(  901): javax.net.ssl.SSLException: Not trusted server certificate 
    W/System.err(  901):    at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:360) 
    W/System.err(  901): …
Run Code Online (Sandbox Code Playgroud)

java ssl https certificate apache-httpclient-4.x

386
推荐指数
9
解决办法
57万
查看次数

HttpClient不会在Android Studio中导入

我有一个用Android Studio编写的简单类:

package com.mysite.myapp;

import org.apache.http.client.HttpClient;

public class Whatever {
    public void headBangingAgainstTheWallExample () {
        HttpClient client = new DefaultHttpClient();
    }
}
Run Code Online (Sandbox Code Playgroud)

从这里我得到以下编译时错误:

Cannot resolve symbol HttpClient

HttpClient包含在Android Studio SDK中?即使不是,我也将它添加到我的Gradle构建中:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'org.apache.httpcomponents:httpclient:4.5'
}
Run Code Online (Sandbox Code Playgroud)

无论有没有最后一个编译行,错误都是一样的.我错过了什么?

android gradle apache-httpclient-4.x android-gradle-plugin

345
推荐指数
14
解决办法
54万
查看次数

不推荐使用Java HttpClient - 它有多难?

我要做的就是下载一些JSON并将其反序列化为一个对象.我还没有下载JSON.

我能找到的几乎所有HttpClient示例,包括apache站点上的那些看起来都像......

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;

public void blah() {
    HttpClient client = new DefaultHttpClient();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,Netbeans告诉我,这DefaultHttpClient已被弃用.我已经尝试使用谷歌搜索DefaultHttpClient deprecated和其他许多变化,我无法找到任何有用的结果,所以我显然错过了一些东西.

下载网页内容的正确Java7方式是什么?作为语言的一部分,真的没有像样的Http客户端吗?我觉得很难相信.

我对Maven的依赖是......

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>LATEST</version>
    <type>jar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

java apache-commons-httpclient apache-httpclient-4.x

168
推荐指数
5
解决办法
16万
查看次数

如何在Java中将http响应主体作为字符串获取?

我知道曾经有一种方法可以通过apache commons来获取它,如下所示:http: //hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html 以及此处的示例:

http://www.kodejava.org/examples/416.html

但我相信这已被弃用了.是否还有其他方法可以在java中生成http get请求并将响应主体作为字符串而不是流来获取?

java apache-commons apache-httpclient-4.x

142
推荐指数
7
解决办法
41万
查看次数

116
推荐指数
13
解决办法
22万
查看次数

JsonparseException非法的非引用字符((CTRL-CHAR,代码10)

我正在尝试使用org.apache.httpcomponentsrest api,它会将json格式数据发布到api.

虽然我得到例外

引起:com.fasterxml.jackson.core.JsonParseException:非法引用的字符((CTRL-CHAR,代码10)):必须使用反斜杠进行转义才能包含在字符串中.

原因是ctrl-char包含在json字符串中.

有没有办法替换它.或者其他一些解决方案?

谢谢!

java json character-encoding apache-httpclient-4.x

76
推荐指数
2
解决办法
9万
查看次数

Apache HttpClient制作多部分表单帖子

我对HttpClient非常环保,而且我发现缺少(和或明显不正确)的文档非常令人沮丧.我正在尝试使用Apache Http Client实现以下帖子(如下所列),但不知道如何实际执行此操作.我将在下周的文档中埋葬自己,但也许更有经验的HttpClient程序员可以尽快给我一个答案.

帖子:

Content-Type: multipart/form-data; boundary=---------------------------1294919323195
Content-Length: 502
-----------------------------1294919323195
Content-Disposition: form-data; name="number"

5555555555
-----------------------------1294919323195
Content-Disposition: form-data; name="clip"

rickroll
-----------------------------1294919323195
Content-Disposition: form-data; name="upload_file"; filename=""
Content-Type: application/octet-stream


-----------------------------1294919323195
Content-Disposition: form-data; name="tos"

agree
-----------------------------1294919323195--
Run Code Online (Sandbox Code Playgroud)

java multipartform-data apache-httpclient-4.x

70
推荐指数
2
解决办法
8万
查看次数

HttpClient 4.0.1 - 如何释放连接?

我对一堆URL进行循环,对于每一个我正在执行以下操作的URL:

private String doQuery(String url) {

  HttpGet httpGet = new HttpGet(url);
  setDefaultHeaders(httpGet); // static method
  HttpResponse response = httpClient.execute(httpGet);   // httpClient instantiated in constructor

  int rc = response.getStatusLine().getStatusCode();

  if (rc != 200) {
    // some stuff...
    return;
  }

  HttpEntity entity = response.getEntity();

  if (entity == null) {
    // some stuff...
    return;
  }

  // process the entity, get input stream etc

}
Run Code Online (Sandbox Code Playgroud)

第一个查询没问题,第二个查询抛出此异常:

线程"main"中的异常java.lang.IllegalStateException:无效使用SingleClientConnManager:仍然分配了连接.确保在分配另一个连接之前释放连接.在org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:199)org.apache.http.impl.conn.SingleClientConnManager $ 1.getConnection(SingleClientConnManager.java:173)......

这只是一个简单的单线程应用程序.我该如何发布此连接?

java connection apache-httpclient-4.x

70
推荐指数
6
解决办法
13万
查看次数

commons httpclient - 将查询字符串参数添加到GET/POST请求

我正在使用公共HttpClient对Spring servlet进行http调用.我需要在查询字符串中添加一些参数.所以我做了以下事情:

HttpRequestBase request = new HttpGet(url);
HttpParams params = new BasicHttpParams();
params.setParameter("key1", "value1");
params.setParameter("key2", "value2");
params.setParameter("key3", "value3");
request.setParams(params);
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(request);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用servlet读取参数时

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getParameter("key");
Run Code Online (Sandbox Code Playgroud)

它返回null.实际上parameterMap是完全空的.当我在创建HttpGet请求之前手动将参数附加到url时,参数在servlet中可用.当我使用附加了queryString的URL从浏览器中访问servlet时也是如此.

这里的错误是什么?在httpclient 3.x中,GetMethod有一个setQueryString()方法来追加查询字符串.4.x中的等价物是什么?

java apache-httpclient-4.x

70
推荐指数
4
解决办法
13万
查看次数

Apache HttpClient API中的CloseableHttpClient和HttpClient有什么区别?

我正在研究我们公司开发的应用程序.它使用Apache HttpClient库.在源代码中,它使用HttpClient类来创建连接到服务器的实例.

我想了解Apache HttpClient,我已经通过这组示例了解.所有示例都使用CloseableHttpClient而不是HttpClient.所以我认为CloseableHttpClient是一个扩展版本HttpClient.如果是这种情况,我有两个问题:

  • 这两者有什么区别?
  • 建议将哪个类用于我的新开发?

java apache http apache-httpclient-4.x

63
推荐指数
5
解决办法
11万
查看次数