PHP cURL:HTTP头显示302和Cookie集,保存并发送Cookie,是否显示相同的头?

PHP cURL:HTTP头显示302和Cookie集,保存并发送Cookie,是否显示相同的头?,php,http,cookies,curl,http-headers,Php,Http,Cookies,Curl,Http Headers,这是昨天一个问题的延续: 我试图访问一个url的内容,问题是这个url处理请求的方式 网址: 第一个请求(不含cookie): 在“学习”了在命令行中使用curl(支持@d3v3us)之后,一个简单的请求curl-ihttp://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-30-2/显示以下内容: curl -i http://www.deindeal.ch/deals/atlas-grand-hote l-2-naechte-30-2/

这是昨天一个问题的延续:

我试图访问一个url的内容,问题是这个url处理请求的方式

网址:

第一个请求(不含cookie):

在“学习”了在命令行中使用curl(支持@d3v3us)之后,一个简单的请求
curl-ihttp://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-30-2/
显示以下内容:

curl -i http://www.deindeal.ch/deals/atlas-grand-hote
l-2-naechte-30-2/
HTTP/1.1 302 FOUND
Date: Fri, 30 Dec 2011 13:15:00 GMT
Server: Apache/2.2.16 (Debian)
Vary: Accept-Language,Cookie,Accept-Encoding
Content-Language: de
Set-Cookie: csrftoken=edc8c77fc74f5e788c53488afba4e50a; Domain=www.deindeal.ch;
Max-Age=31449600; Path=/
Set-Cookie: generic_cookie=1; Path=/
Set-Cookie: sessionid=740a8a2cb9fb51166dcf865e35b91888; expires=Fri, 27-Jan-2012
 13:15:00 GMT; Max-Age=2419200; Path=/
Location: http://www.deindeal.ch/welcome/?deal_slug=atlas-grand-hotel-2-naechte-
30-2
Content-Length: 0
Connection: close
Content-Type: text/html; charset=utf-8
第二次请求(带有cookies):

因此,我使用
-c
保存cookie,检查它是否保存为
cookie.txt
,然后再次运行请求,添加
-b cookie.txt
,得到以下结果:

curl -i -b cookie.txt http://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-3
0-2/
HTTP/1.1 302 FOUND
Date: Fri, 30 Dec 2011 13:38:17 GMT
Server: Apache/2.2.16 (Debian)
Vary: Accept-Language,Cookie,Accept-Encoding
Content-Language: de
Set-Cookie: csrftoken=49f5c804d399f8581253630631692f5f; Domain=www.deindeal.ch; Max-Age=31449600; P
ath=/
Location: http://www.deindeal.ch/welcome/?deal_slug=atlas-grand-hotel-2-naechte-30-2
Content-Length: 0
Connection: close
Content-Type: text/html; charset=utf-8
对我来说,这看起来像完全相同的内容,减去cookie中的一个或两个参数,但也许我忽略了什么

我试图让curl请求正常工作,并返回与通过浏览器请求url时相同的内容,但我不确定下一步该怎么做

注意:我已经标记了这个PHP,因为我正在使用PHP进行请求,我只是简单地使用命令行来轻松显示返回的标题-因此,如果有任何其他PHP库或方法可以工作(更好,或者在cURL不会工作的地方),请随时提出建议

任何帮助都将不胜感激;)

你需要这个

curl -iL  -c cookie.txt -b cookie.txt http://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-3
-b
标志用于从中读取cookie。对于http事务后用于保存cookie的文件,请使用
-c
标志。它叫饼干罐

使用(对不起,是我写的)拉取内容非常简单

require "WebGet.php";
$w = new WebGet();
$w->cookieFile = 'cookie.txt'; // must be writable
$w->requestContent("https://github.com/shiplu/dxtool");
print_r($w->responseHeaders) // prints response headers
print_r($w->cachedContent) // prints url content

我可能误解了你的问题,但302回复意味着找到了内容,你只需要按照“位置”进行操作,对吗?cUrl只执行一个请求,不像浏览器那样,浏览器会看到302(设置cookies,就像你正在做的那样)然后跟随该位置头。看起来您的位置中有一个“?”而不是原始位置。在位置url上使用相同的cookie jar运行cUrl


我认为这是另一种方式(从这里开始),但无论如何,它仍然没有请求正确的页面。我看到您使用了
-L
来跟踪位置,但是位置的内容与我通过浏览器访问URL时的内容不同。在我的浏览器中-第一轮,它重定向到结束位置(302)并设置一个cookie,第二轮,它将我带到实际请求的内容(可能基于我现在有一个带有某些参数的cookie的事实),如果这有意义的话。抱歉,已更新。实际上,您需要同时使用
-b
-c
标志。我在前面的
curl--help中找不到它。现在添加了。是的,它只是在“位置:”(HTTP 200)显示最终内容,就像在没有发送cookie的情况下请求一样。没有HTTP 302的其他位置或任何东西。我在想,也许cookie是用javascript在客户端处理的(因此,重定向在“Location:”的内容中),但是当在浏览器中访问url时,我在地址栏中从未看到url更改。他们可能在检查用户代理服务器端?尝试从普通浏览器传递用户代理字符串,看看是否有帮助。刚刚尝试过,结果相同::/。这似乎是个棘手的问题。