java HttpClient.execute(get) 中的 Apache HttpComponents 没有做任何事情

Apache HttpComponents in java HttpClient.execute(get) not doing anything

我正在使用 Apache HttpComponents 创建与网站的 http 连接。我已经制作了一些方法来使用 post/get 获取网站内容,发送 cookie,接收它们并将它们存储在我创建的名为 CookieManager 的 class 中。一切正常,但是当我尝试使用 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 和 headers 参数是这样的:

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 中的 session ID。我尝试调试,发现由于 HttpResponse response = client.execute(get); 行它什么也没做,所以程序仍在执行,但它卡在了那一行。另外,我应该提到我可以让其他页面发送所需的 cookie,但是 http://mylink.com/market/ 给了我这个问题。

我已经使用chrome 'network'标签查看了浏览器和服务器之间的交互,唯一的是我没有包含一些headers(比如Host ). 有人知道我做错了什么吗? 谢谢

我可以通过在 client.execute(...) 调用之前在函数中添加这一行来修复它:client = HttpClientBuilder.create().build();