标签: apache-commons-httpclient

在HttpClient请求的URL中转义&符号

所以我有一些使用Jakarta HttpClient的Java代码:

URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());
Run Code Online (Sandbox Code Playgroud)

问题是如果title包含任何&符号(&),它们被认为是参数分隔符,请求变得棘手......如果我用URL转义的等价物替换它们%26,那么getEscapedPathQuery()会将其双重转义%2526.

我目前正在通过基本修复损坏来解决这个问题:

URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));
Run Code Online (Sandbox Code Playgroud)

但是必须有一个更好的方法来做到这一点,对吧?请注意,标题可以包含任意数量的不可预测的UTF-8字符等,因此必须转义其他所有字符.

java url escaping http apache-commons-httpclient

5
推荐指数
1
解决办法
7346
查看次数

BindException /在加载时使用HttpClient时打开的文件太多

我有1000个专用的Java线程,每个线程每秒轮询一个相应的url.

public class Poller { 
    public static Node poll(Node node) { 
        GetMethod method =  null; 
        try { 
            HttpClient client = new HttpClient(new SimpleHttpConnectionManager(true)); 
            ......
        } catch (IOException ex) { 
            ex.printStackTrace(); 
        } finally { 
            method.releaseConnection(); 
        } 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

线程每一秒运行一次:

for (int i=0; i <1000; i++) { 
    MyThread thread = threads.get(i) // threads  is a static field 
    if(thread.isAlive()) { 
        // If the previous thread is still running, let it run. 
    } else { 
        thread.start(); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我每隔一秒运行一次该作业,我会得到如下随机异常:

java.net.BindException: Address already in use …
Run Code Online (Sandbox Code Playgroud)

java apache-commons-httpclient

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

旧版Commons-HttpClient在Axis2 Web服务客户端中提供IOException

我正在为axis2 Web服务使用wsdl2java生成的Web服务客户端(axis2版本为1.6.1).因此,对于http连接,使用旧版本的commons-httpclient 3.1.在对我的Web服务客户端进行一些负载测试时.在某些情况下,我遇到了这个例外

org.apache.axis2.AxisFault: org.apache.axiom.ext.io.StreamCopyException: Error reading from source
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at com.ardic.arcsp.carbon.registry.ws.stub.WSStorageServiceStub.fromOM(WSStorageServiceStub.java:16706)
at com.ardic.arcsp.carbon.registry.ws.stub.WSStorageServiceStub.wSgetById(WSStorageServiceStub.java:6659)
at com.ardic.arcsp.update.wsclient.WSStorageServiceClient.getResourceById(WSStorageServiceClient.java:177)
at com.ardic.arcsp.update.wsclient.OTAUpdateTestServlet.downloadResource(OTAUpdateTestServlet.java:162)
at com.ardic.arcsp.update.wsclient.OTAUpdateTestServlet.doGet(OTAUpdateTestServlet.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at sun.reflect.GeneratedMethodAccessor30.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:273)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:305)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:298)
at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:57)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.wso2.carbon.server.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:154)
at org.wso2.carbon.server.TomcatServer$1.invoke(TomcatServer.java:254)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:396) …
Run Code Online (Sandbox Code Playgroud)

axis2 wsdl2java wso2 apache-commons-httpclient

5
推荐指数
1
解决办法
2898
查看次数

使用Java将音频从44.1kHz下采样到16kHz

我有一个应用程序,它记录来自用户麦克风的语音样本,然后将其上传到服务器,然后服务器对其进行处理.看来我必须用以下参数记录以避免IllegalArgumentException:

Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
float sampleRate = 44100.0F;
int sampleSizeInBits = 16;
int channels = 2;
int frameSize = 4;
float frameRate = 44100.0F;
boolean bigEndian = false;
Run Code Online (Sandbox Code Playgroud)

但是我需要将它记录在16khz,而不是44.1,(sampleRate和framerate都是,我假设)并且它必须是单声道(1声道).PCM签名也是强制性的,所以这很好.(服务器非常挑剔,我无法对其进行任何更改.)如何使用Java转换它?

我通过HttpClient将音频文件作为Filebody提交给servlet,将其保存在服务器上,然后进行处理.

java audio applet javasound apache-commons-httpclient

5
推荐指数
1
解决办法
3781
查看次数

HttpClient支持多种TLS协议

我们正在编写一个必须使用HTTPS与几台服务器通信的应用程序.它需要与AWS(使用AWS库)以及使用TLS 1.2的一些内部服务进行通信.

我开始通过更改我的HttpClient来使用TLS 1.2 SSLContext:

public static SchemeRegistry buildSchemeRegistry() throws Exception {
    final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
    sslContext.init(createKeyManager(), createTrustManager(), new SecureRandom());
    final SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("https", 443, new SSLSocketFactory(sslContext)));
    return schemeRegistry;
}
Run Code Online (Sandbox Code Playgroud)

并将此SchemeRegistry注入到DefaultHttpClient对象中(通过spring),但这样做我从AWS获得错误,因此我假设(我可能错了)AWS不支持TLS 1.2(如果我只是,我不会收到此消息使用正常的DefaultHttpClient):

AmazonServiceException: Status Code: 403, AWS Service: AmazonSimpleDB, AWS Request ID: 5d91d65f-7158-91b6-431d-56e1c76a844c, AWS Error Code: InvalidClientTokenId, AWS Error Message: The AWS Access Key Id you provided does not exist in our records.
Run Code Online (Sandbox Code Playgroud)

如果我尝试在spring中定义两个HttpClient,一个使用TLS 1.2,一个是默认值,我得到以下错误,我认为这意味着Spring不喜欢实例化并自动装配两个HttpClient对象:

SEVERE: Servlet /my-refsvc threw load() exception
java.lang.NullPointerException
at com.company.project.refsvc.base.HttpsClientFactory.<clinit>(BentoHttpsClientFactory.java:25)
... …
Run Code Online (Sandbox Code Playgroud)

java ssl spring httpclient apache-commons-httpclient

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

HttpClient忽略编码,在一台计算机上

我在几个不同(但显然相同)的计算机上使用HttpClient(版本3.1)从URL读取UTF-8编码的JSON数据.

在所有的机器上,保存一个,它工作正常.我有一些西班牙语单词,它们的口音完整无缺.

一台计算机顽固地拒绝合作.尽管有一个Content-Type: application/json;charset=utf-8标题,它显然将数据视为ISO-8859-1 .

如果我用来curl从该计算机访问该URL,它可以正常工作.在每台其他计算机上,curl和基于HttpClient的程序都能正常工作.

我在每台机器上的common-httpclient.jar文件上做了一个md5sum:相同.

是否存在一些深入Linux的设置,可能会有所不同并且在弄乱我?还有其他任何理论,甚至可以去看看吗?

编辑:有些人要求提供更多细节.

最初我在一个复杂的Tomcat应用程序的内容深处遇到了问题,但我轻轻地调整了样本以检索有问题的URL,并且(幸运的是)有同样的问题.

这些是运行jdk1.7.0_45的Linux 2.6机器.

一个env命令产生一组变量.唯一一个远程看点的是LANG=en_US.UTF-8.

java character-encoding apache-commons-httpclient

5
推荐指数
1
解决办法
807
查看次数

Java HttpClient 3.1 Multipart Post

我正在使用Java HttpClient 3.1来编写REST API调用的代码.我遇到了Post的问题multipart/form-data.这是我想要进行的API调用,以API提供者为例:

POST /v1/documents HTTP/1.1
Host: .......
x-session-key: 02e57c7d-d071-4c63-b491-1194a9939ea5.2016-01-13T22:34:53.101Z
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="documentImage"; filename="ScreenShot 2016-01-14 at 1.48.48 PM.png"
Content-Type: image/png


----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="documentType"

Picture ID
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="token"

02e57c7d-d071-4c63-b491-1194a9939ea5
----WebKitFormBoundary7MA4YWxkTrZu0gW
Run Code Online (Sandbox Code Playgroud)

这是我的HttpClient 3.1代码:

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;


Part[] parts = new Part[3];
parts[0] = new StringPart("token", this.user.userID);
parts[1] = new StringPart("documentType", "Picture ID");

try {
    File imageFile = new File("/path/test2.png");
    parts[2] = new FilePart("documentImage", …
Run Code Online (Sandbox Code Playgroud)

java post multipartform-data apache-commons-httpclient

5
推荐指数
1
解决办法
2859
查看次数

如何在apache httpclient上强制使用IPv4?(Java)的

我的程序总是卡住30秒

[DEBUG] SingleClientConnManager - Get connection for route HttpRoute[{}->http://foobar.com]
Run Code Online (Sandbox Code Playgroud)

进一步调查显示这是由于ipv4后备.无论如何强制ipcl4在httpclient上解决问题?

PS我认为这是一个IPv4问题,因为它curl -L04 http://foobar.com是一个即时下载,同时curl -L06 http://foobar.com产生curl: (6) Couldn't resolve host 'foobar.com'

java dns apache-commons-httpclient

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

为什么这个简单的SOAP客户端不工作(org.apache.http)?

我想将一个XML文件作为请求发送到SOAP服务器.这是我的代码:( 使用org.apache.http使用SOAP操作发送HTTP Post请求进行了修改)

import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.entity.StringEntity;
import org.apache.http.protocol.HTTP;
import org.apache.http.HttpResponse;
import java.net.URI;

public static void req()   {
        try {
            HttpClient httpclient = new DefaultHttpClient();
            String body="xml here";
            String bodyLength=new Integer(body.length()).toString();

            URI uri=new URI("http://1.1.1.1:100/Service");
            HttpPost httpPost = new HttpPost(uri);
            httpPost.setHeader( "SOAPAction", "MonitoringService" );
            httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");


            StringEntity entity = new StringEntity(body, "text/xml",HTTP.DEFAULT_CONTENT_CHARSET);
            httpPost.setEntity(entity);

            RequestWrapper requestWrapper=new RequestWrapper(httpPost);
            requestWrapper.setMethod("POST");


            requestWrapper.setHeader("Content-Length",bodyLength);
            HttpResponse response = httpclient.execute(requestWrapper);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

在此之前我从服务器收到错误'http 500'(内部服务器错误),但现在我没有得到任何回复.我知道服务器工作正常,因为与其他客户端没有问题.

谢谢.

java post soap http apache-commons-httpclient

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

如何在java中使用Elasticsearch Rest api?

我正在使用Apache Http客户端来使用ElasticSearch Rest Api,但我总是得到HTTP错误代码为200.请帮忙

Java代码

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.util.Scanner;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;

public class ApacheHttpClientPost {

    public static void main(String[] args) {
        String path="C:\\Tools\\ElasticSearchApi\\javadoc.txt", filecontent="";
        ApacheHttpClientPost apacheHttpClientPost = new ApacheHttpClientPost();
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost("http://localhost:9200/versioneg/message/_percolate");
            filecontent=apacheHttpClientPost.readFileContent(path);
            System.out.println(filecontent);
            StringEntity input = new StringEntity(filecontent);
            input.setContentType("application/json");
            postRequest.setEntity(input);
            HttpResponse response = httpClient.execute(postRequest);
            if (response.getStatusLine().getStatusCode() != 201) {
                throw new RuntimeException("Failed : HTTP error code …
Run Code Online (Sandbox Code Playgroud)

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

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