Java 下载cookie以发出新的GET请求

Java 下载cookie以发出新的GET请求,java,apache,http-headers,xmlhttprequest,session-cookies,Java,Apache,Http Headers,Xmlhttprequest,Session Cookies,我正在尝试对网站执行PHP GET请求: 问题是,只有在我将Cookie信息附加到请求的标题时,此网站才会处理我的请求 或者以图片的形式,如果我在浏览器中禁用cookie,我会得到以下结果: 这意味着网站承认这是我第一次“访问”网站 问题是,如果我现在使用右上角的搜索栏,它将不会处理此请求: 它将只显示相同的(常规)屏幕 例如:如果我禁用了Cookie并搜索“AAPL”,它将不会显示任何结果 现在,如果启用了Cookie,请求将得到很好的处理: 因此显示了“AAPL”结果 您也可以自己尝试

我正在尝试对网站执行PHP GET请求:

问题是,只有在我将Cookie信息附加到请求的标题时,此网站才会处理我的请求

或者以图片的形式,如果我在浏览器中禁用cookie,我会得到以下结果:

这意味着网站承认这是我第一次“访问”网站

问题是,如果我现在使用右上角的搜索栏,它将不会处理此请求: 它将只显示相同的(常规)屏幕

例如:如果我禁用了Cookie并搜索“AAPL”,它将不会显示任何结果

现在,如果启用了Cookie,请求将得到很好的处理:

因此显示了“AAPL”结果

您也可以自己尝试:

启用cookies后,访问
http://www.pennystocktweets.com/user_posts/feeds?cat=search&lptyp=prep&usrstk=AAPL

禁用Cookie后,再次访问链接:
http://www.pennystocktweets.com/user_posts/feeds?cat=search&lptyp=prep&usrstk=AAPL

现在比较一下答案,只有第一个是正确的

这意味着,只有在客户端下载了一个cookie,然后向服务器发出另一个(新的)GET请求并附加了此cookie信息后,网站才能运行

(这是否意味着网站需要会话cookie才能正常运行?)

现在我要做的是模仿这样的请求:

现在,同样的情况仍然存在:如果我附加(我的)cookie信息,响应工作正常,如果我不附加,响应就不工作

但我不知道如何获取cookie信息,然后在新的get请求中使用它。

所以我的问题是:

我如何向网站提出2个请求,以便:

在第一个GET请求中,我从网站获取cookie信息,并将其存储在Java程序中

在第二个GET请求中,我使用存储的cookie信息(作为标头)发出新请求

注意:我不知道cookie是普通cookie还是会话cookie,但我怀疑它是会话cookie


非常感谢您的帮助

正如Apache commons httpclient的文档中所述:
HttpClient支持Cookie的自动管理,包括允许服务器设置Cookie并在需要时自动将其返回到服务器。还可以手动设置要发送到服务器的cookies。

每当http客户端收到cookie时,它们就会被持久化到
HttpState
,并自动添加到新请求中。这是默认行为

在下面的示例代码中,我们可以看到两个GET请求返回的cookie。我们无法直接查看发送到服务器的cookie,但我们可以使用协议/网络嗅探器或
ngrep
等工具查看通过网络传输的数据:

import java.io.IOException;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;

public class HttpTest {

public static void main(String[] args) throws HttpException, IOException {
    String url = "http://www.whatarecookies.com/cookietest.asp";
    HttpClient client = new HttpClient();
    client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
    HttpMethod method = new GetMethod(url);
    int res = client.executeMethod(method);
    System.out.println("Result: " + res);
    printCookies(client.getState());
    method = new GetMethod(url);
    res = client.executeMethod(method);
    System.out.println("Result: " + res);
    printCookies(client.getState());
}
public static void printCookies(HttpState state){
    System.out.println("Cookies:");
    Cookie[] cookies = state.getCookies();
    for (Cookie cookie : cookies){
        System.out.println("  " + cookie.getName() + ": " + cookie.getValue());
    }               
}   
}
这是输出:

Result: 200
Cookies:
  active_template::468: %2Fresponsive%2Fthree_column_inner_ad3b74de5a1c2f311bee7bca5c368aaa4e:b326b5062b2f0e69046810717534cb09
Result: 200
Cookies:
  active_template::468: %2Fresponsive%2Fthree_column_inner_ad%2C+3b74de5a1c2f311bee7bca5c368aaa4e%3Db326b5062b2f0e69046810717534cb09
  3b74de5a1c2f311bee7bca5c368aaa4e: b326b5062b2f0e69046810717534cb09
以下是
ngrep
的摘录:

MacBook$ sudo ngrep -W byline -d en0 "" host www.whatarecookies.com
interface: en0 (192.168.11.0/255.255.255.0)
filter: (ip) and ( dst host www.whatarecookies.com )
#####
T 192.168.11.70:56267 -> 54.228.218.117:80 [AP]
GET /cookietest.asp HTTP/1.1.
User-Agent: Jakarta Commons-HttpClient/3.1.
Host: www.whatarecookies.com.
.

####
T 54.228.218.117:80 -> 192.168.11.70:56267 [A]
HTTP/1.1 200 OK.
Server: nginx/1.4.0.
Date: Wed, 27 Nov 2013 10:22:14 GMT.
Content-Type: text/html; charset=iso-8859-1.
Content-Length: 36397.
Connection: keep-alive.
Vary: Accept-Encoding.
Vary: Cookie,Host,Accept-Encoding.
Set-Cookie: active_template::468=%2Fresponsive%2Fthree_column_inner_ad; expires=Fri, 29-Nov-2013 10:22:01 GMT; path=/; domain=whatarecookies.com; httponly.
Set-Cookie: 3b74de5a1c2f311bee7bca5c368aaa4e=b326b5062b2f0e69046810717534cb09; expires=Thu, 27-Nov-2014 10:22:01 GMT.
X-Middleton-Response: 200.
Cache-Control: max-age=0, no-cache.
X-Mod-Pagespeed: 1.7.30.1-3609.
.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/loose.dtd">
...

##
T 192.168.11.70:56267 -> 54.228.218.117:80 [AP]
GET /cookietest.asp HTTP/1.1.
User-Agent: Jakarta Commons-HttpClient/3.1.
Host: www.whatarecookies.com.
Cookie: active_template::468=%2Fresponsive%2Fthree_column_inner_ad.
Cookie: 3b74de5a1c2f311bee7bca5c368aaa4e=b326b5062b2f0e69046810717534cb09.
.

##
T 54.228.218.117:80 -> 192.168.11.70:56267 [A]
HTTP/1.1 200 OK.
Server: nginx/1.4.0.
Date: Wed, 27 Nov 2013 10:22:18 GMT.
Content-Type: text/html; charset=iso-8859-1.
Content-Length: 54474.
Connection: keep-alive.
Vary: Accept-Encoding.
Vary: Cookie,Host,Accept-Encoding.
Set-Cookie: active_template::468=%2Fresponsive%2Fthree_column_inner_ad%2C+3b74de5a1c2f311bee7bca5c368aaa4e%3Db326b5062b2f0e69046810717534cb09; expires=Fri, 29-Nov-2013 10:22:05 GMT; path=/; domain=whatarecookies.com; httponly.
Set-Cookie: 3b74de5a1c2f311bee7bca5c368aaa4e=b326b5062b2f0e69046810717534cb09; expires=Thu, 27-Nov-2014 10:22:05 GMT.
X-Middleton-Response: 200.
Cache-Control: max-age=0, no-cache.
X-Mod-Pagespeed: 1.7.30.1-3609.
.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/loose.dtd">
...
MacBook$sudo ngrep-W署名-d en0“主机www.whatarecookies.com
接口:en0(192.168.11.0/255.255.255.0)
过滤器:(ip)和(dst主机www.whatarecookies.com)
#####
T 192.168.11.70:56267->54.228.218.117:80[美联社]
获取/cookietest.asp HTTP/1.1。
用户代理:Jakarta Commons HttpClient/3.1。
主持人:www.whatarecookies.com。
.
####
T 54.228.218.117:80->192.168.11.70:56267[A]
HTTP/1.1200ok。
服务器:nginx/1.4.0。
日期:2013年11月27日星期三格林尼治标准时间10:22:14。
内容类型:text/html;字符集=iso-8859-1。
内容长度:36397。
连接:保持活力。
变化:接受编码。
变化:Cookie、主机、接受编码。
设置Cookie:active\u template::468=%2F响应%2F三列\u内部\u ad;expires=2013年11月29日星期五10:22:01 GMT;路径=/;domain=whatarecookies.com;httponly。
设置Cookie:3B74DE5A1C2F311BEE7BCA5C668AAA4E=B326B5062B0E690468107534CB09;expires=2014年11月27日星期四格林威治标准时间10:22:01。
X-Middleton-Response:200。
缓存控制:最大年龄=0,无缓存。
X-Mod-Pagespeed:1.7.30.1-3609。
.
...
##
T 192.168.11.70:56267->54.228.218.117:80[美联社]
获取/cookietest.asp HTTP/1.1。
用户代理:Jakarta Commons HttpClient/3.1。
主持人:www.whatarecookies.com。
Cookie:活动\u模板::468=%2响应%2三列\u内部\u广告。
Cookie:3B74DE5A1C2F311BEE7BCA5C668AAA4E=B326B5062B0E69046810717534CB09。
.
##
T 54.228.218.117:80->192.168.11.70:56267[A]
HTTP/1.1200ok。
服务器:nginx/1.4.0。
日期:2013年11月27日星期三格林尼治标准时间10:22:18。
内容类型:text/html;字符集=iso-8859-1。
内容长度:54474。
连接:保持活力。
变化:接受编码。
变化:Cookie、主机、接受编码。
设置Cookie:active_template::468=%2Fresponsive%2fTriple_column_Internal_ad%2C+3B74DE5A1C2F311BEE7BCA5C668AAA4E%3DB326B502B0E6904810717534CB09;expires=2013年11月29日星期五10:22:05 GMT;路径=/;domain=whatarecookies.com;httponly。
设置Cookie:3B74DE5A1C2F311BEE7BCA5C668AAA4E=B326B5062B0E690468107534CB09;expires=周四,2014年11月27日10:22:05格林威治标准时间。
X-Middleton-Response:200。
缓存控制:最大年龄=0,无缓存。
X-Mod-Pagespeed:1.7.30.1-3609。
.
...

因此我使用
CookieOrigin CookieOrigin=context.getCookieOrigin()获取cookie信息
CookieSpec-CookieSpec=context.getCookieSpec()httpclient.execute(httpget,context)发送信息(以及上面的行)?应自动发送cookie。它是httpclient的一部分。CookiePolicy可以覆盖如何处理Cookie。谢谢!我将尝试一下。我必须更正我的答案,因为这是针对ApacheHttpClient>=4的。对于HttpClient 3.x,Cookies页面声明:HttpClient支持Cookies的自动管理,包括允许服务器设置Cookies,并在需要时自动将其返回到服务器。不需要上下文,我无法成功地提出正确的请求。你能帮我显示一下cookie部分需要的确切代码吗?
MacBook$ sudo ngrep -W byline -d en0 "" host www.whatarecookies.com
interface: en0 (192.168.11.0/255.255.255.0)
filter: (ip) and ( dst host www.whatarecookies.com )
#####
T 192.168.11.70:56267 -> 54.228.218.117:80 [AP]
GET /cookietest.asp HTTP/1.1.
User-Agent: Jakarta Commons-HttpClient/3.1.
Host: www.whatarecookies.com.
.

####
T 54.228.218.117:80 -> 192.168.11.70:56267 [A]
HTTP/1.1 200 OK.
Server: nginx/1.4.0.
Date: Wed, 27 Nov 2013 10:22:14 GMT.
Content-Type: text/html; charset=iso-8859-1.
Content-Length: 36397.
Connection: keep-alive.
Vary: Accept-Encoding.
Vary: Cookie,Host,Accept-Encoding.
Set-Cookie: active_template::468=%2Fresponsive%2Fthree_column_inner_ad; expires=Fri, 29-Nov-2013 10:22:01 GMT; path=/; domain=whatarecookies.com; httponly.
Set-Cookie: 3b74de5a1c2f311bee7bca5c368aaa4e=b326b5062b2f0e69046810717534cb09; expires=Thu, 27-Nov-2014 10:22:01 GMT.
X-Middleton-Response: 200.
Cache-Control: max-age=0, no-cache.
X-Mod-Pagespeed: 1.7.30.1-3609.
.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/loose.dtd">
...

##
T 192.168.11.70:56267 -> 54.228.218.117:80 [AP]
GET /cookietest.asp HTTP/1.1.
User-Agent: Jakarta Commons-HttpClient/3.1.
Host: www.whatarecookies.com.
Cookie: active_template::468=%2Fresponsive%2Fthree_column_inner_ad.
Cookie: 3b74de5a1c2f311bee7bca5c368aaa4e=b326b5062b2f0e69046810717534cb09.
.

##
T 54.228.218.117:80 -> 192.168.11.70:56267 [A]
HTTP/1.1 200 OK.
Server: nginx/1.4.0.
Date: Wed, 27 Nov 2013 10:22:18 GMT.
Content-Type: text/html; charset=iso-8859-1.
Content-Length: 54474.
Connection: keep-alive.
Vary: Accept-Encoding.
Vary: Cookie,Host,Accept-Encoding.
Set-Cookie: active_template::468=%2Fresponsive%2Fthree_column_inner_ad%2C+3b74de5a1c2f311bee7bca5c368aaa4e%3Db326b5062b2f0e69046810717534cb09; expires=Fri, 29-Nov-2013 10:22:05 GMT; path=/; domain=whatarecookies.com; httponly.
Set-Cookie: 3b74de5a1c2f311bee7bca5c368aaa4e=b326b5062b2f0e69046810717534cb09; expires=Thu, 27-Nov-2014 10:22:05 GMT.
X-Middleton-Response: 200.
Cache-Control: max-age=0, no-cache.
X-Mod-Pagespeed: 1.7.30.1-3609.
.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/loose.dtd">
...