【问题标题】:HTTPPost usage error to in execution method执行方法中的 HTTPPost 使用错误
【发布时间】:2009-12-19 09:52:17
【问题描述】:

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

【问题讨论】:

  • 问题是代码卡在 client.execut 方法中,它没有移动,我也没有得到任何响应。我要设置任何代理吗?
  • 运行测试的时候,有没有可以接收帖子的目标设置?执行可能只是忙于将数据传递到它无法写入的套接字。
  • ya 目标设置为接收数据。对于服务器可能忙于接收数据的时间,我等待它执行最多 5 分钟
  • 服务器访问日志是否显示连接已建立? servlet/jsp 是否接收到任何数据?

标签: java https


【解决方案1】:

可能您的请求并没有真正“卡住”,而只是等待 TCP 连接超时,默认情况下可能会很长 - 比如 5 分钟左右。应该有一种方法可以将超时设置为更短的值 - 查看您的 http 客户端的 javadoc,或者尝试等待更长时间。

您还可以在程序卡住时进行线程转储,以查看线程被阻塞的位置(请参阅 Sun JDK 中的 jps 和 jstack 实用程序)

【讨论】:

    【解决方案2】:

    我认为您首先需要消除服务器行为不端的可能性。您是否尝试过从程序外部发布到该 URL。如果您在类似 unix 的系统上或在 Windows 上并拥有 cygwin,请尝试这样的操作:

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

    如果 POST 成功,请获取程序的线程转储并将其发布在此处供我们查看。

    【讨论】:

    • 这工作正常,通过 curl 我能够访问服务器,通过 java 程序我被卡住而没有得到任何信息
    猜你喜欢
    • 2021-09-14
    • 2021-01-12
    • 1970-01-01
    • 2014-05-11
    • 2011-09-10
    • 2012-04-27
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多