2014-07-21 25 views
1

因此我遇到了一個相當不尋常的問題。PHP - 無法從cURL響應設置RAW cookie

我已經得到了一個RESTful API,我將它連接到它,它的SignIn方法返回一個響應主體。響應內部是一個以字符串形式出現的授權令牌。然後我需要將該授權字符串設置爲cookie以便系統識別用戶已登錄。

我已經寫了PHP來執行cURL請求,該請求成功獲取響應授權代碼,但是該字符串包含「+」和「/」字符我需要設置原始cookie而不是常規cookie,因爲http編碼將生成一個包含「%2B」和「%2F」的cookie,代替「+」和「/」。

的問題是,我setrawcookie()返回false,其中setcookie()函數返回true,即使我通過它的參數相同。

而且,如果我走授權字符串就是這樣由PHP提出並設置靜態字符串與該複製的身份驗證字符串,setrawcookie成功。

由於某些原因,PHP不允許我使用cURL請求中的字符串數據創建原始cookie。有誰知道爲什麼會發生這種情況?

$data = array("Username" => $_POST['Username'], "Password" => $_POST['Password']);                  
$data_string = json_encode($data); 



    $ch = curl_init('https://cloudhub.quivers.com/api/v1/SignIn/Signin');               
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");           
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CERTINFO, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-Type: application/json', 
     'Content-Length: ' . strlen($data_string)) 
    );                      

    $result = curl_exec($ch); 
    echo curl_error($ch); 

setrawcookie("AuthToken", $result, 0, "/", "www.quivers.com", 1); 

在這種情況下,setrawcookie()失敗,但setcookie()工作。

響應主體看起來是這樣的: -

1DEbKeyynVTbXeRJ2i5j2+UgwgmuD17VgQtFbzg2LBLmXMLDUY5t9YV2wdqQOcycZumuzqHH3AJ8e8I3nao0VPBuELAoGa6T27jwgAAizCoSyu0maPnXzfFbYkMnOPRhak9/6fQMqspg... 
+1

是的,但是如果你在那裏發送一個原始的'+',並且接收端對這個字符串進行了解碼,那麼'+'就會變成一個空格並破壞你的字符串。就像setcookie去的那樣,它並不在乎那個字符串來自哪裏。一個字符串的一個字符串。 setcookie不知道它來自curl。 –

回答

1

嘗試保存捲曲的cookie到一個文件中。它可以這樣做:

curl_setopt($curl_handle, CURLOPT_COOKIESESSION, true); 
curl_setopt($curl_handle, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_setopt($curl_handle, CURLOPT_COOKIEFILE, "cookie.txt"); 

現在cookie信息(會話)將存儲在文件中。