我使用以下代码制作一个http客户端,我在执行方法中面临问题,它被困在那里。
public static final HttpHost target = new HttpHost("test.xyz.com", 443, "https");
public static void test()
{
HttpEntity responseEntity = null;
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("/xyz/test");
System.out.println("post is " +post.getRequestLine());
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password);
AuthScope authScope = new AuthScope(target.getHostName(), target.getPort());
System.out.println("auth scope is " +authScope);
client.getCredentialsProvider().setCredentials(authScope, credentials);
//i am passing a xml here
post.setEntity(new StringEntity(xml, "UTF-8"));
post.addHeader("Content-Type", "application/xml");
post.addHeader("Accept", "application/xml");
System.out.println("post " +post.getAllHeaders().length);
HttpResponse response = client.execute(target, post); //getting stuck here no response at all
System.out.println("response " +response.getStatusLine());
responseEntity = response.getEntity();
System.out.println("response entity " +responseEntity);
String responseXmlString = EntityUtils.toString(responseEntity);
System.out.println("response" +responseXmlString);
}
我在这里遇到问题
HttpResponse response = client.execute(target, post);
可能出现什么问题?
问题是代码被卡在client.execut方法中,它没有移动更进一步我没有得到任何响应。我必须设置任何代理吗?
答案 0 :(得分:0)
可能你的请求实际上并没有“卡住”,只是在等待TCP连接超时,这默认可能是相当长的 - 比如5分钟左右。应该有一种方法可以将超时设置为更短的值 - 查看http客户端的javadoc或者尝试等待更长时间。
此外,您可以在程序停滞时进行线程转储以查看线程被阻塞的位置(请参阅Sun JDK中的jps和jstack实用程序)
答案 1 :(得分:0)
我认为您首先需要消除服务器行为不端的可能性。您是否尝试过从程序外部发送到该URL。如果你在类似unix的系统上,或者在windows上并拥有cygwin,请尝试这样的事情:
cat <yourfile.xml> | curl -X POST -H 'Content-type: text/xml' -d @- https://test.xyz.com:443/xyz/test
如果POST成功,请获取程序的线程转储并在此处发布,以供我们查看。