Ошибка использования HTTPPost в методе выполнения - PullRequest
0 голосов
/ 19 декабря 2009

Я использую следующий код для создания http-клиента, я столкнулся с проблемой в методе execute, он застрял там.

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 голосов
/ 19 декабря 2009

Я думаю, вам сначала нужно устранить возможность неправильной работы вашего сервера. Вы пробовали размещать на этом URL снаружи вашей программы. Попробуйте что-то вроде этого, если вы работаете в Unix-подобной системе или в Windows и у вас есть Cygwin:

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

Если проверка прошла успешно, получите дамп потока вашей программы и опубликуйте его здесь, чтобы мы могли его посмотреть.

0 голосов
/ 19 декабря 2009

Вероятно, ваш запрос на самом деле не «завис», а просто ожидает тайм-аута соединения TCP, который по умолчанию может быть довольно продолжительным - около 5 минут или около того. Должен быть способ установить более короткое значение тайм-аута - взгляните на javadoc для своего http-клиента или просто попробуйте подождать дольше.

Также вы можете получить дамп потока, когда ваша программа застряла, чтобы увидеть, где поток заблокирован (см. Утилиты jps и jstack в Sun's JDK)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...