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();
我正在使用 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();