PHP& cURL使用现有的COOKIEFILE +添加我自己的值来保存

时间:2016-01-28 22:55:55

标签: php curl cookies

我已经保存了一个我想要引用和更新的cookie文件。我还希望通过CURLOPT_COOKIE指定我自己的其他Cookie值,并将其保存到我现有的Cookie文件中。

但是,我无法让它发挥作用。

我的代码是:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $website); // Define target site
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return page in string
curl_setopt($ch, CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_COOKIE, "fruit=apple;");          
curl_setopt($ch, CURLOPT_COOKIEJAR, "usercookies/cookie_$user.txt"); // Tell cURL where to write cookies
curl_setopt($ch, CURLOPT_COOKIEFILE, "usercookies/cookie_$user.txt"); // Tell cURL which cookies to send
curl_setopt($ch, CURLOPT_TIMEOUT,15); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects
$returnx = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch); 

我保存的Cookie文件未反映我通过curl_setopt($ch, CURLOPT_COOKIE, "fruit=apple;");所做的更改。保存的cookiefile应该显示“fruit = apple”,但它仍然显示旧值或cURL请求返回的值。

我是否需要引用整个域名才能保存?

cookie文件如下所示:

# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

.go.com TRUE    /   FALSE   1754020486  one AE4F4981
.go.com TRUE    /   FALSE   1468965260  two B9A1

1 个答案:

答案 0 :(得分:2)

您使用CURLOPT_COOKIE手动添加的Cookie不会在请求结束时保存到Cookie jar中。

唯一的情况是服务器为您发送的cookie发回Set-Cookie标头以进行更新。

原因是因为cURL请求具有cookie结构,该cookie结构包含在请求结束时写入的cookie。数据只能通过以下方式获得此结构:a)首先从cookie文件中读取,或者在响应头中读取b)Set-Cookie标头。

稍加注意,您可以使用以下内容将自己的cookie附加到该文件中:

$domain = '.go.com';
$expire = time() + 3600;
$name   = 'fruit';
$value  = 'apple';
file_put_contents($cookieJar, "\n$domain\tTRUE\t/\tFALSE\t$expire\t$name\t$value", FILE_APPEND);