簡體   English   中英

如何在兩個 php 進程之間保持 curl 會話?

[英]How to keep curl session alive between two php processes?

當 php 進程存在時,我可以保存會話並以登錄用戶身份瀏覽網站。 那沒問題。

這是我的工作代碼:

$options = array(
            CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0',
            CURLOPT_URL            => $url,
            CURLOPT_HEADER         => true,
            CURLOPT_VERBOSE        => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_REFERER        => 'http://website.com/',
            CURLOPT_POST           => 1,
            CURLOPT_POSTFIELDS     => http_build_query($post),

            CURLOPT_COOKIESESSION   => true,
            CURLOPT_COOKIEJAR       => __DIR__ . '/cookie-name',
            CURLOPT_COOKIEFILE      => '',
            CURLOPT_HTTPHEADER      => array(
                'Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"',
                'Accept-Language: "en-US,en;q=0.5"',
                'Connection: "keep-alive"',
                'Cache-Control: "max-age=0"'
            )
        );

    $ch = curl_init();

    curl_setopt_array( $ch, $options );

    try {
        $raw_response  = curl_exec( $ch );

        if(curl_errno($ch))
            throw new Exception(curl_error($ch), 500);

        $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if ($status_code != 200)
            throw new Exception("Response with Status Code [" . $status_code . "].", 500);

    } catch(Exception $ex) {
        if ($ch != null) curl_close($ch);
        throw new Exception($ex);
    }

現在我們有$ch資源可以將它用於其他請求。 但它仍然在一個 php 會話中使用 curl 對象。 如果我需要在不同的 php 進程中使用這個會話怎么辦? 是否可以?

不。PHP 基本上是一個無狀態的應用程序。 可以通過數據庫或內存緩存在其他 php 進程中重用已初始化的數據,但是每次啟動新進程時都必須重新初始化資源會話。

如果由於某種原因能夠使用同一個會話非常重要,那么您可以考慮編寫一個持續運行的守護進程,在后台處理來自 apache 服務器的排隊請求,接受和響應來自服務器的請求一個循環。

我想出了它是如何工作的)如果你想保持會話,只需將set-cookie選項從標頭響應復制到某個文件。 之后,您可以使用此 cookie 進行下一次連接。 您不必再次進行授權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM