2009-12-19 32 views
0

我正在使用下面的代码来制作一个http客户端,我面临着执行方法的问题,它在那里卡住了。HTTPPost使用错误在执行方法

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方法它不移动furthur既没有得到任何response.Do我必须设置任何代理?

+0

问题是代码卡在client.execut方法它不移动furthur我也没有得到任何回应。我是否设置任何代理? – sarah 2009-12-19 10:15:31

+0

当您运行测试时,您是否有可以接收该帖子的目标设置?执行可能只是忙于尝试将数据传送到无法写入的套接字。 – rsp 2009-12-19 11:02:50

+0

ya目标设置为接收数据。服务器可能忙于接收数据的时间长度,我等待最多5分钟执行 – sarah 2009-12-19 11:16:24

回答

0

可能你的请求并不是真的'卡住',而只是等待TCP连接超时,其中bu默认可能是相当lonkg - 就像5分钟左右。应该有一种方法可以将超时设置为较短的值 - 请查看您的http客户端的javadoc,或者尝试等待更长的时间。

你也可以在你的程序是陷进去看看那里的线程被阻塞(见Sun的JDK JPS和jstack公用事业)

0

我觉得你首先需要消除你的服务器错误操作的可能性将线程转储。您是否尝试过从您的程序之外发布到该网址?尝试这样的事情,如果你是一个类Unix系统,或者是在Windows和了cygwin:

cat <yourfile.xml> | curl -X POST -H 'Content-type: text/xml' -d @- https://test.xyz.com:443/xyz/test 

如果POST成功,让你的程序的线程转储,并张贴在这里,让我们来看看。

+0

这是工作正常,通过卷曲我能够访问服务器,通过Java程序我正在stucked没有得到任何信息 – sarah 2009-12-21 05:51:23