2015-04-01 177 views
0

如何将由Selenium(driver.get_cookies())保存的cookie转换为可与curl一起使用的cookie?Selenium Cookie卷曲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}] 

有什么办法来实现这一目标?

+0

'curl'是一个需求还是'selenium'到'requests' cookie转移也适用于你? – alecxe 2015-04-01 18:40:04

+0

@alecxe是的,卷曲是一个要求,我需要使用卷曲请求中从硒倾倒的cookie。 – 2015-04-01 18:43:32

回答

1

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

selenium倾销与driver.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 VAR现在看起来是这样的:

NID=somelooooooooooongvalue;SID=somelooooooooooooooongvalue; 

现在我们可以使用$curlCookiesCURLOPT_HTTPHEADER使卷曲请求

$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); 

就是这样,代码完美工作。 我希望这可以帮助他人。