【问题标题】:What is the format for a cookie with multiple key value pairs using CURLOPT_COOKIE使用 CURLOPT_COOKIE 的具有多个键值对的 cookie 的格式是什么
【发布时间】:2016-12-27 20:22:58
【问题描述】:

我正在抓取一个网站,如果我使用我的浏览器并点击 T.O.S.,该页面会在我的浏览器中设置一个 cookie,如下所示:

名称 OnCoreWeb

AutoLoadImages=-1&ImageViewer=2&DefaultNumberOfRows=10

cookie 名称是 OnCoreWeb,但值是由三个键/值对组成的 & 分隔字符串。

当我在 cURL 中发送 cookie 时,我会这样构造它:

curl_setopt($ch, CURLOPT_COOKIE, "OnCoreWeb={AutoLoadImages=0&ImageViewer=0&DefaultNumberOfRows=50});

但是当我输出标题时,Set-Cookie 似乎在第一个 cookie 的末尾附加了一个额外的值对,如下所示:

HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Set-Cookie: OnCoreWeb={AutoLoadImages=0&ImageViewer=0&DefaultNumberOfRows=50}&AutoLoadImages=-1; expires=Mon, 21-Aug-2017 00:36:44 GMT; path=/
X-Powered-By: ASP.NET

日期:2016 年 8 月 21 日星期日 00:36:44 GMT

您可以看到,在 Set-Cookie 行中,&AutoLoadImages=-1; 紧跟在结束 } 之后。这让我觉得我的 cookie 格式错误。

作为控件,我已注释掉所有 COOKIEJAR 和 COOKIEFILE 行,因此唯一的 cookie 设置是通过 CURLOPT_COOKIE 属性完成的。

当我想到这一点时,我想你可以说 cookie VALUE 只是一个字符串,并且解析是在服务器端完成的,所以将字符串包装在 {} 中并不会真正神奇地将字符串变成一个数组。有了这种理念,我还尝试将字符串包装在 '' (双单引号)中,这也没有任何区别。我想我应该尝试完全删除 {} 或 '',因为 cookie 值只是一个字符串,而&符号并不意味着客户端的东西。服务器端决定使用“&”作为分隔符来解析字符串。

神奇的是,就像这样,通过移除 cookie 值字符串周围的 {} 或 '' 包装,多余的、多余的 &AutoLoadImages=-1; 消失了。

新标题看起来正确,如下所示:

HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=yqtxvba24xodegufrkoih355; path=/; HttpOnly
Set-Cookie: OnCoreWeb=AutoLoadImages=0&ImageViewer=0&DefaultNumberOfRows=50; expires=Mon, 21-Aug-2017 17:35:12 GMT; path=/
X-Powered-By: ASP.NET
Date: Sun, 21 Aug 2016 17:35:12 GMT

【问题讨论】:

    标签: php curl cookies web web-scraping


    【解决方案1】:

    如果您在Set-Cookie Http 响应中发现两次AutoLoadImages 嗅探http 标头,那只是因为服务器行为。

    恕我直言,这个数据 cookie 编码似乎有点奇怪,我同意它看起来是错误的,但鉴于这是一种服务器端行为,我们不能对此做出任何假设。

    我建议您尝试浏览该网站,看看您会收到哪种/格式的数据。

    【讨论】:

    • 为什么要投反对票?请评论。如果可能的话,我真的很想了解和改进我的答案,或者另一方面,如果它绝对错误,甚至删除它。
    • 我没有对你投反对票。甚至我的个人资料都说“拒绝投票是弱而愚蠢的”。但是,我要指出,您的回答没有解决我的问题,即如何格式化 cookie。这就是我在这个问题中寻找的。这并不意味着您的答案没有价值,因为确实如此。
    • 我从 cookie 值中删除了 {} 和 '',这应该是一个字符串。多余的AutoLoadImages 消失了。
    • cookie 只是一串文本,我已经看到它以多种方式格式化,人们根据需要格式化和存储这段数据。据我所知,没有标准,我见过json或csv,纯文本或base64编码。您只是试图对另一个站点的行为进行逆向工程。我试图写的是,在这种情况下,我们无法知道开发人员的想法,我们只能猜测并希望我们是对的。
    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2014-10-27
    • 2020-11-25
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多