所以我有一些使用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字符等,因此必须转义其他所有字符.
我有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) 我正在为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) 我有一个应用程序,它记录来自用户麦克风的语音样本,然后将其上传到服务器,然后服务器对其进行处理.看来我必须用以下参数记录以避免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,将其保存在服务器上,然后进行处理.
我们正在编写一个必须使用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) 我在几个不同(但显然相同)的计算机上使用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 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) 我的程序总是卡住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'
我想将一个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'(内部服务器错误),但现在我没有得到任何回复.我知道服务器工作正常,因为与其他客户端没有问题.
谢谢.
我正在使用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