执行方法中的HTTPPost使用错误

时间:2009-12-19 09:52:17

标签: java https

我使用以下代码制作一个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方法中,它没有移动更进一步我没有得到任何响应。我必须设置任何代理吗?

2 个答案:

答案 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成功,请获取程序的线程转储并在此处发布,以供我们查看。