【问题标题】:PHP Curl Mozilla LiveHttpHeaders analysis neededPHP Curl Mozilla LiveHttpHeaders 分析需要
【发布时间】:2011-11-19 09:20:35
【问题描述】:

我试图使用 PHP Curl 库登录到一个站点。即使我已经成功登录,我似乎无法访问登录页面以外的任何其他页面。现在我知道 cookie 可能存在一些问题,但相信我,我尝试了所有可能的 COOKIEJAR 和 COOKIEFILE 组合。 我需要一些帮助来分析这组 LiveHTTPHeaders 信息。我担心帖子字段——尤其是 Login.x 和 Login.y。它们似乎在每次登录时都会发生变化。这可能是个问题吗?我如何弄清楚将随机整数分配给该值的方式?此外,是否添加了 1 个以上的 cookie?如果是这样,我如何将其合并到 curl 中?我是否在单个语句中使用一个 COOKIEJAR、多个或名称数量的 cookie..

我已经粘贴了下面的标题-

http://amizone.net/Amizone/default.aspx

POST /Amizone/default.aspx HTTP/1.1
Host: amizone.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://amizone.net/
Cookie: ASPSESSIONIDSSBCDQAQ=FJHPMILBALMDGIFEOOOBNFHI
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
username=1596681&password=CENSORED&Login.x=14&Login.y=15

如果需要,我只会发布 cURL 代码。

主页的 LiveHTTPHeaders 信息:

GET /amizone/default.aspx HTTP/1.1
Host: amizone.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive

LOGIN 的 LiveHTTPHeaders 信息:** 显示在顶部。没有变化。

登录后任何页面访问的 LiveHTTPHeaders 信息--

GET /amizone/WebForms/TimeTable/StudentTimeTableForWeek.aspx HTTP/1.1
Host: amizone.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://amizone.net/amizone/WebForms/Home.aspx
Cookie: ASP.NET_SessionId=hn5mfsre0y3b1l45nxlgzr55;                                                     UserId=127953D3849DEF71FB6CF9F55DD3BBADE48E686D24ADC87923FB6C60077ECC0362AB0C5A9C4DF194461C348DBAE6FEC861827F886FE2C17EA79155500CA4FC04EE897B7658A59DA2F286F2436F6EDD07BE2DD7DD829798F4C81ABAEFEE400B3A71078A74BF1C169BF1DA2865CC9E5968FF26ED7D; countrytabs=0; countrytabsRT=0; countrytabsRB=0

***请注意在这种情况下如何发送多个 cookie(我认为)。我的 cookiejar 和 cookiefile 命令应该如何改变?

【问题讨论】:

  • curl_setopt(CURLOPT_COOKIE, "name1=value1;name2=value2");
  • 好的,我猜这些是 cookie 的内容。所以我不需要使用cookiejar和cookiefile?
  • 你能显示你当前不工作的 curl 代码吗? cookiefile 和 cookiejar 的组合应该可以工作。登录的 x 和 y 只是您正在单击的按钮的坐标,它们可能不会被检查任何内容,但您可以使用 rand() 为其获取随机值
  • @drew:感谢 fr 解决 x y 坐标问题。我认为你是对的。至于 curl 代码,我仍然无法正确执行。我之前也发布过这个。stackoverflow.com/questions/7299155/php-curl-help-needed

标签: php cookies curl http-headers


【解决方案1】:

在记录会话时,首先刷新所有 cookie,然后确保记录服务器设置 cookie 的时间,这一点很重要。

通常,所需的 cookie 设置在登录页面或浏览器首先加载的另一个页面中,然后当您 POST 到特定 URL 时,必须传递先前设置的 cookie。

所以,附加的痕迹是不够的。

【讨论】:

  • 谢谢回复...我在 curl.haxx.se 上阅读了您的帖子,您已经提到了这一点。我会牢记 n 彻底检查所有 cookie。
【解决方案2】:

过去,这个 cURL 代码足以让我通过存储 cookie 来维护登录会话:

$ch = curl_init('https://somesecureurl.com/login/account');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/hmcookies.txt'); // cookies in this file are sent by curl with the request
curl_setopt($ch, CURLOPT_COOKIEJAR,  '/tmp/hmcookies.txt'); // upon completing request, curl saves/updates any cookies in this file

$data = curl_exec($ch);

其他需要保证的,cookiejar文件是webserver可写的,或者有创建文件的权限。

正如 Daniel 所说,某些网站可能要求您首先访问登录页面以设置一些初始 cookie,然后发布登录表单。所以您的请求可能会:

Request login page
Post to login form
Try to access protected page

【讨论】:

  • 嘿,非常感谢!我看到了为主页发送的标题等...我编辑了帖子。你现在能不能告诉我我错过了什么。我使用几乎与你给出的完全相同的 curl 代码。
  • cookie jar 将保存特定站点提供的所有 cookie,无论是 1 还是 100,您不必更改与此相关的任何内容。还是没有运气?你能在 pastebin 上放一些代码吗?
  • 您的代码对我来说没问题,我只对 URL 进行了更改,并且能够很好地登录到我的网站之一。如果您尝试跨多个请求保持登录,您可能只想删除 CURLOPT_COOKIESESSION 行。这告诉 curl 忽略它之前设置的 cookie(有效地让你退出)。但是除了 URL 之外没有对您的代码进行任何更改,我能够登录到一个站点。也许检查 /tmp/hmcookies.txt 文件,看看它包含什么。还要验证 /tmp 是否存在并且可由您的用户写入。
  • 我删除了 cookiesession 行,但它仍然让我退出!此外,tmp 文件夹中没有存储 cookie 文件。它是空的。 (我已授予 tmp 文件夹 777 访问权限)。
  • 尝试从登录帖子请求中捕获输出,看看你得到了什么输出。您可能需要在该请求中关闭 followlocation,但如果登录失败,无论哪种方式,您都应该在输出中看到它。
猜你喜欢
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 2012-03-08
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多