Apache HttpComponents в java HttpClient.execute(get) ничего не делает

Я использую Apache HttpComponents для создания http-соединения с веб-сайтом. Я сделал несколько методов для получения содержимого веб-сайта с помощью post/get, для отправки файлов cookie, их получения и сохранения в созданном мной классе под названием CookieManager. Все работает нормально, но когда я пытаюсь получить содержимое страницы с помощью метода GET, программа продолжает работать, но ничего не делает.

public HttpResponse sendRequestGet(String url, List<NameValuePair> headers) throws IOException{

    HttpGet get = new HttpGet(url);

    for (NameValuePair header : headers){
        get.setHeader(header.getName(), header.getValue());
    }

    HttpResponse response = client.execute(get);

    System.out.println("----------- STATUS CODE -------------");
    System.out.println(response.getStatusLine().getStatusCode() + ": " + url);
    System.out.println("-------------------------------------");

    return response;

}

Код показан выше. Строка url содержит URL-адрес, к которому я хочу получить доступ, скажем, http://mylink.com/market и параметры заголовков сделаны так:

List<NameValuePair> headerList = new ArrayList<NameValuePair>();
    headerList.add((NameValuePair) new BasicNameValuePair("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"));
    headerList.add((NameValuePair) new BasicNameValuePair("Accept-Language", "en-US;q=1,en;q=0.8"));
    headerList.add((NameValuePair) new BasicNameValuePair("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"));
    headerList.add((NameValuePair) new BasicNameValuePair("Cookie", getCookies()));
    headerList.add((NameValuePair) new BasicNameValuePair("Referer", "http://mylink.com/profile/"));
    headerList.add((NameValuePair) new BasicNameValuePair("Upgrade-Insecure-Requests", "1"));

Если я вызываю функцию с getCookies(), возвращающей пустую строку, она работает, но проблема в том, что я должен отправить свой идентификатор сеанса, который находится в файлах cookie. Я попытался выполнить отладку и обнаружил, что, поскольку строка HttpResponse response = client.execute(get); ничего не делает, программа все еще выполняется, но застревает в этой строке. Кроме того, я должен упомянуть, что я могу заставить другие страницы отправлять необходимые файлы cookie, но http://mylink.com/market/ дает мне эту проблему.

Я уже использовал вкладку «Сеть» Chrome, чтобы увидеть взаимодействие между браузером и сервером, единственное, что я не включаю некоторые заголовки (например, Host). Кто-нибудь знает, что я делаю неправильно? Спасибо


person lpares12    schedule 28.11.2015    source источник


Ответы (1)


Я смог исправить это, добавив эту строку внутри функции перед вызовом client.execute(...): client = HttpClientBuilder.create().build();

person lpares12    schedule 10.12.2015