【问题标题】:Alternatives for PHP / cURL Cookies?PHP / cURL Cookie 的替代品?
【发布时间】:2015-06-22 12:39:14
【问题描述】:

是否有 任何替代方法使用 PHP / cURL 服务器上没有 cookie 缓存,例如在 cURL 选项 CURLOPT_COOKIEJAR 和 CURLOPT_COOKIEFILE 中使用 .txt 文件?

我尝试从 CURL 会话的 HTTP 标头中读取 cookie 并手动设置它们以避免 CURL 会话的服务器端存储。

【问题讨论】:

    标签: php caching curl cookies


    【解决方案1】:

    你可以直接设置标题。

    $cookies = array(
        'somekey' => 'somevalue'
    );
    $endpoint = 'https://example.org';
    $requestMethod = 'POST';
    $timeout = 30;
    
    $headers = array(
        sprintf('Cookie: %s', http_build_query($cookies, null, '; '))
    );
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $endpoint);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // you may need to make this false depending on the servers certificate 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $requestMethod);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    
    $response = curl_exec($ch);
    
    list($header, $body) = explode("\r\n\r\n", $response, 2);
    
    // now all the headers from your request will be available in $header
    

    【讨论】:

    • 但是我从 cURL 会话的响应标头中获得了要发送的 cookie。是否可以在输出中获取标头并在下一个 cURL 会话中从该标头发送 cookie?
    • 函数 http_build_cookie(...) 在我的 IDE 中未定义。这里发生了什么问题?
    • 我更新了可能对你有用的功能。
    • 但是 cookie 仅在 cURL 会话的 PHP 脚本中设置,并在下次调用 cURL 会话时再次使用。我该如何解决这个问题?目前,我从 cURL 会话的响应头中读取设置的 cookie,并使用 setcookie() 将它们放入浏览器中并放入变量中。
    • 也许我没有完全理解。所以你想保持cookie从请求到请求?也许利用会话变量而不是将其存储在客户端。
    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2017-03-25
    • 2012-09-26
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多