[英]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.