2017-08-09 42 views
0

我試圖通過登錄到外部站點獲取Set-Cookie值,並稍後使用此值執行不同的操作。我不能用CookieJar保存它,我需要從函數返回字符串。PHP-CURL - 設置Cookie頭(忽略點)

無論如何。預期的Cookie應該看起來像這樣:「JSESSIONID = 123.cls_rs2a_8009」但我得到「JESSIONID = 123」

所以它似乎忽略點後的所有內容 - 或者它沒有像瀏覽器那樣接收它。

對此有何幫助?

當前的代碼示例不顯示的網址:

$headers = []; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 
    function($curl, $header) use (&$headers){ 
     $len = strlen($header); 
     $header = explode(':', $header, 2); 
     if (count($header) < 2) 
      return $len; 

     $name = strtolower(trim($header[0])); 
     if (!array_key_exists($name, $headers)) 
      $headers[$name] = [trim($header[1])]; 
     else 
      $headers[$name][] = trim($header[1]); 
     return $len; 
    } 
); 

$data = curl_exec($ch); 
var_dump($headers); 

回答

1

可能使用狂飲應該是一個更容易一些。從Guzzle Docs

// Use a specific cookie jar 
$jar = new \GuzzleHttp\Cookie\CookieJar; 
$r = $client->request('GET', 'http://httpbin.org/cookies', [ 
    'cookies' => $jar 
]); 

來回你的榜樣,似乎你錯過了headers in response

// get headers too with this line 
curl_setopt($ch, CURLOPT_HEADER, 1); 

您也可以嘗試讓full cookies list

curl_getinfo($curl, CURLINFO_COOKIELIST); 

這migth也來得心應手:Guzzle cookies handling

希望幫助。