【问题标题】:Selenium Cookie to Curl Cookie硒饼干卷曲饼干
【发布时间】:2015-06-06 12:41:33
【问题描述】:

如何将 selenium (driver.get_cookies()) 保存的 cookie 转换为可与 curl 一起使用的 cookie?

selenium cookie 转储到文本文件时的内容如下所示:

[{u'domain': u'.site.com', u'name': u'NID', u'value': u'somelooooooooooongvalue', u'expiry': 1443722412, u'path': u'/', u'secure': False}, {u'domain': u'.site.com', u'name': u'SID', u'value': u'somelooooooooooooooongvalue', u'expiry': 1490983212, u'path': u'/', u'secure': False}]

有什么办法可以做到吗?

【问题讨论】:

  • curl 的要求或seleniumrequests cookie 传输也适用于您?
  • @alecxe 是的,curl 是必需的,我需要在 curl 请求中使用从 selenium 转储的 cookie。

标签: php python selenium curl cookies


【解决方案1】:

我设法用正则表达式解决了这个问题。

seleniumdriver.get_cookies() 转储的cookie 示例:

$seleniumCookies = "[{u'domain': u'.site.com', u'name': u'NID', u'value': u'somelooooooooooongvalue', u'expiry': 1443722412, u'path': u'/', u'secure': False}, {u'domain': u'.site.com', u'name': u'SID', u'value': u'somelooooooooooooooongvalue', u'expiry': 1490983212, u'path': u'/', u'secure': False}]";

$curlCookies = "";

preg_match_all('/\'name\': u\'(.*?)\', u\'value\': u\'(.*?)\'/i', $seleniumCookies, $matches, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($matches[0]); $i++) {
    $name =  $matches[1][$i];
    $value =  $matches[2][$i];

    $curlCookies .= "$name=$value;";

}

$curlCookies 变量现在看起来像这样:

NID=somelooooooooooongvalue;SID=somelooooooooooooooongvalue;

现在我们可以使用CURLOPT_HTTPHEADER 中的$curlCookies 发出 curl 请求:

$url =  "https://some.host.com/that-need-selenium-cookies";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Host: some.host.com:443",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Language: en-US,en;q=0.8",
"Cookie: $curlCookies"
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch, CURLOPT_ENCODING, "");
$pagebody=curl_exec ($ch);
curl_close ($ch);

就是这样,代码完美运行。 我希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多