2011-05-15 139 views
2

我想通過cURL在PHP中設置cookie,但它失敗。我的PHP代碼如下所示通過捲曲設置cookie

$ch=curl_init(); 
$url="http://localhost/javascript%20cookies/test_cookies.html"; 
curl_setopt($ch, CURLOPT_COOKIE, 'user=1'); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($ch); 
curl_close($ch); 
echo $contents; 
?> 

文件test_cookies.html包含的JavaScript來檢查一個cookie,如果它發現它dispalys額外的用戶內容的內容。 但是當我使用上面的腳本時,它顯示了頁面test_cookies.html的內容,但沒有附加的用戶內容,這意味着它沒有設置cookie。

我試着寫另一個劇本這樣

<?php 
header("Set-Cookie:user=1"); 
header("Location:test_cookies.html"); 
?> 

這個工作並設置cookie,並給出了額外的用戶的內容了。 我使用

curl_setopt($ch,CURLOPT_COOKIEFILE,"cookie.txt"); 
curl_setopt($ch,CURLOPT_COOKIEJAR,"cookie.txt"); 

這是寫入cookie信息的文件,但抓取的網頁時,不讀書也試過。 有人可以幫忙嗎?

回答

2

由於JavaScript在瀏覽器中進行檢查,因此您應該在將輸出發送到瀏覽器之前設置cookie。所以,你需要兩個腳本結合:

$ch=curl_init(); 
$url="http://localhost/javascript%20cookies/test_cookies.html"; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($ch); 
curl_close($ch); 
header("Set-Cookie:user=1"); 
echo $contents; 

說明:
請注意,我們正在尋找兩個轉變這裏:

  1. 數據由捲曲取出,然後
  2. 它被送到到瀏覽器。

這是一個特殊情況,您使用curl從localhost獲取內容,但在現實生活中,您將使用curl從第三個主機獲取內容。

如果根據請求中是否發送了cookie,您收到的內容不同,那麼您應該使用curl設置cookie。在大多數情況下,您可以將內容無需額外調整即可發送到瀏覽器。但在這裏,您在瀏覽器中檢查cookie 做出決定,因此您不需要第一個cookie設置,而您確實需要第二個。

+0

,但發送一個cookie通知頭意味着我不需要設置CURLOPT_COOKIE選項。對我來說似乎不好。 – lovesh 2011-05-15 08:38:18

+0

我意識到由curl獲取的內容並不取決於是否存在cookie,我更新了我的答案,因此,在通過curl獲取html頁面時不需要cookie,但在內容到達時您確實需要cookie在瀏覽器中。這就是以上所做的。我會把感受放在一邊並做一個測試。 – 2011-05-15 08:46:20

+0

@Majid Fouladpour:但這種方式我不使用捲曲來設置cookie,而是依靠標題。如果我需要使用捲曲怎麼辦?我使用了像CURLOPT_COOKIEFILE和CURLOPT_COOKIEJAR這樣的選項,但他不工作。有沒有其他出路? – lovesh 2011-05-15 08:50:36

1

JavaScript不能通過從curl獲取頁面來工作。

+0

那麼如果我不使用JavaScript,我的html頁面如何檢查cookie? – lovesh 2011-05-15 08:14:20

+0

在PHP中,查看$ _COOKIE。您的服務器端代碼也可以與Cookie進行交互,而不僅僅是JavaScript。 – 2011-05-15 08:20:38

+0

Nowise,只有當你有php頁面並且通過$ _COOKIES – Danzan 2011-05-15 08:21:51