标签: apache-commons-httpclient

尝试使用apache commons httpclient类登录到https安全的问题

我试图使用Apache commons httpclient登录到https安全站点.

因为我在HttpClient Package中找不到任何这样的类,所以我没有办法将证书与我的httprequest一起传递.

如果有人可以指导我在哪里需要添加证书处理?

任何套餐都可以吗?

我愿意接受各种想法,以及在java中执行此操作的任何其他方式.平台必须只是java但是..

我在下面发布了我的代码.

import java.net.MalformedURLException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory;



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;


public class TestHttpClient {
public static String formPostUrl ="https://login.findmespot.com/faces/welcome.jsp" ;
public static String LOGON_SITE = "login.findmespot.com";
static final int    LOGON_PORT = 443;
public static void main(String[] args ) throws MalformedURLException
{
   // AuthSSLProtocolSocketFactory ar= new AuthSSLProtocolSocketFactory(uRL, formPostUrl, uRL0, formPostUrl)
     //Protocol authhttps = new  Protocol("https", new AuthSSLProtocolSocketFactory(new URL("D:\key\my.keystore"), "4cKR!Z%p",new URL("D:\key\my.truststore"), "4cKR!Z%p"), 443); …
Run Code Online (Sandbox Code Playgroud)

java apache-commons-httpclient

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

如何使用Apache HttpClient发送XML POST请求?

我想做格式的HTTP POST,如下所示,

<?xml version="1.0" encoding="UTF-8" ?>
<authRequest>
 <username>someusernamehere</username>
 <password>somepasswordhere</password>
</authRequest>
Run Code Online (Sandbox Code Playgroud)

对于任何基于登录的POST,我通常使用以下机制,

HttpParams params = new BasicHttpParams();
        params.setParameter(
                "http.useragent",
                "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2) Gecko/20100115 Firefox/3.6");
        DefaultHttpClient httpclient = new DefaultHttpClient(params);

        HttpPost httppost = new HttpPost("http://mysite.com/login");
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
        formparams.add(new BasicNameValuePair("username", "stackoverflow"));
        formparams.add(new BasicNameValuePair("password", "12345"));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
        httppost.setEntity(entity);
        HttpResponse httpresponse = httpclient.execute(httppost);
Run Code Online (Sandbox Code Playgroud)

但是通过这种方式,POST数据看起来像,

username=stackoverflow&password=12345
Run Code Online (Sandbox Code Playgroud)

如何根据我上面提到的指定XML格式格式化此请求?

提前致谢.

java http-post apache-commons-httpclient

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

在Apache HttpClient中禁用保持活动状态

对于某些我们无法解决的问题,我想在Apache HttpClient 3.1上禁用保持活动状态。但是,我在Internet上找不到任何资源。你知道怎么做吗?

java apache keep-alive apache-commons-httpclient

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

使用有效的客户端证书时HttpClient 403错误

我正在尝试使用Java在网站上自动执行某些任务.我有一个有效的客户端为该网站(当我使用Firefox登录时工作),但当我尝试使用http客户端登录时,我一直收到403错误.请注意,我希望我的信任商店信任任何东西(我知道它不安全,但此时我并不担心).

这是我的代码:

    KeyStore keystore = getKeyStore();//Implemented somewhere else and working ok
    String password = "changeme";

    SSLContext context = SSLContext.getInstance("SSL");
    KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmfactory.init(keystore, password.toCharArray());
    context.init(kmfactory.getKeyManagers(), new TrustManager[] { new X509TrustManager() {
        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1)
                throws CertificateException {
        }
        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1)
                throws CertificateException {
        }

        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    } }, new SecureRandom());
    SSLSocketFactory sf = new SSLSocketFactory(context);

    Scheme httpsScheme = new Scheme("https", 443, sf);
    SchemeRegistry schemeRegistry …
Run Code Online (Sandbox Code Playgroud)

java ssl certificate apache-commons-httpclient

3
推荐指数
1
解决办法
7179
查看次数

如何在新的Apache Http Client 4.3中创建SSL套接字工厂?

如何在新的Apache Http Client 4.3中创建SSL套接字工厂?

这是我在4.3之前创建它的方式

val ts = new TrustStrategy() {
  def isTrusted(chain: Array[X509Certificate], authType: String): Boolean = true
}

new SSLSocketFactory(ts, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
Run Code Online (Sandbox Code Playgroud)

现在SSLSocketFactory标记为已弃用.定义自定义的新方法是TrustStrategy什么?我无法理解.

ssl apache-commons-httpclient

3
推荐指数
1
解决办法
5924
查看次数

请求重试Apache HttpClient之间的超时

有人可以分享如何配置现代HttpClient 4.5.3重试失败的请求并等待一段时间再重试之前?

到目前为止,我看起来正确,.setRetryHandler(new DefaultHttpRequestRetryHandler(X, false))它将允许重试X次请求.

但我无法理解如何配置退避:.setConnectionBackoffStrategy()/ .setBackoffManager()根据JavaDocs调节其他内容,而不是重试之间的超时.

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

3
推荐指数
2
解决办法
3434
查看次数

在单例中使用 Apache CloseableHttpClient 的风险

我正在使用 Apache Http Client 4.5.3,目前正在重构一些代码。

目前我有一个单例 Util,它有几个方法,它们的职责是使用 get、posts、patch 等来访问 API。以前,我们一直使用 anHttpClientBuilderCloseableHttpClient每个方法的每次调用构造一个对象。粗略地说,单例的架构是这样的:

import com.google.gson.Gson
import org.apache.http.client.methods.{HttpGet, HttpPost}
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.{CloseableHttpClient, HttpClientBuilder}
import org.apache.http.util.EntityUtils
import org.json4s.DefaultFormats
import org.json4s.jackson.JsonMethods.parse

object ApiCallerUtil {

  case class StoreableObj(name:String, id:Long)
  case class ResponseKey(key:Long)

  def getKeyCall(param:String): ResponseKey = {
    implicit val formats = DefaultFormats
    val get = new HttpGet("http://wwww.someUrl.com/api/?value=" + param)
    val client:CloseableHttpClient = HttpClientBuilder.create().build()
    val response = client.execute(get)
    try {
      val entity = response.getEntity
      val entityStr = EntityUtils.toString(entity)
      parse(entityStr).extract[ResponseKey]
    } finally { …
Run Code Online (Sandbox Code Playgroud)

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

3
推荐指数
1
解决办法
3485
查看次数

Apache HttpPost 多个文件上传因服务器错误而失败 - 缺少初始多部分边界

我尝试使用 Apache Http 库上传多个文件。

   compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.5.6'
Run Code Online (Sandbox Code Playgroud)

这就是我上传文件的方式。

String url = "url";
File f1 = new File("file1");
File f2 = new File("file2");
HttpPost request = new HttpPost(url);
request.addHeader("Content-Type", "multipart/form-data");
request.addHeader("Authorization", "Basic abcd=");
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

FileBody fileBody1 = new FileBody(f1, ContentType.DEFAULT_TEXT);
FileBody fileBody2 = new FileBody(f2, ContentType.DEFAULT_TEXT);

multipartEntityBuilder.addPart("file_1_param", fileBody1);
multipartEntityBuilder.addPart("file_2_param", fileBody2);
HttpEntity httpEntity = multipartEntityBuilder.build();
request.setEntity(httpEntity);
HttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(request);

HttpEntity entity = response.getEntity();
if (entity == null) {
    return; …
Run Code Online (Sandbox Code Playgroud)

java file-upload http apache-commons-httpclient

3
推荐指数
1
解决办法
2370
查看次数

HttpClient setHeader 和 addHeader 有什么区别?

使用 Apache HttpClient 版本时:

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

setHeader 和 addHeader 有什么区别?

    httpPost.addHeader("AuthenticationKey",authenticationKey);
    httpPost.addHeader("Content-Type","application/json");

    httpPost.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
    httpPost.setHeader("Pragma", "no-cache"); // HTTP 1.0
    httpPost.setHeader("X-Requested-With", "XMLHttpRequest"); // mimics a browser REST request
Run Code Online (Sandbox Code Playgroud)

java apache-commons-httpclient

3
推荐指数
2
解决办法
6197
查看次数

Apache DefaultHttpClient - java.net.BindException:地址已在使用:连接

我正在访问 Tomcat 8.5 Web 服务器的 Java“客户端”中运行性能测试。大约 13,000 个请求 HTTP 请求失败并出现错误后,

org.apache.http.impl.client.DefaultHttpClient tryConnect
INFO: Retrying connect
java.net.BindException: Address already in use: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:127)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:643)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
Run Code Online (Sandbox Code Playgroud)

代码是,

    for (int i = 0; i < 15000; i++) {
        try {
            if (i % 1000 == 0) …
Run Code Online (Sandbox Code Playgroud)

java apache-commons-httpclient

3
推荐指数
1
解决办法
808
查看次数