我使用curl和PHP發出一個POST請求,發送一個用戶名/密碼數組作爲JSON對象。請求標題CURLOPT_HEADER時不返回發佈數據。 PHP CURL
到目前爲止,所有的工作都非常出色。現在我想讀取標題,以便我可以解析cookie。我知道我可以使用一個文件/ jar並測試過 - 效果很好。我不想寫一個東西到磁盤。
所以我把CURLOPT_HEADER標記爲TRUE,我可以解析cookie的值。
但是 - 返回的數據不見了。完全沒有... 當我標記_HEADER FALSE - 我看到了答覆。
代碼:
$login_array = array('login' => array('username' => $username, 'password' => $password));
$login_json = json_encode($login_array);
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE); <-- this line f***s it all up...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $login_json);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_URL, 'http://localhost/test/token');
$result = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code != 200) { /* do something */ }
preg_match_all('|Set-Cookie: (.*);|U', $result, $content);
$cookies = implode(';', $content[1]);
echo "cookie: $cookies<br>"; <-- thanks _HEADER for the cookie value
$response = json_decode($result);
$user_id = $response->user->id;
echo 'user_id: ' . $user_id . '<br>'; <-- empty man... headers are on means body is off...
我已經挖過不同的職位,似乎OPTS的順序會有所不同。試圖移動它們 - 沒有運氣。
想法?!
這似乎是在做的伎倆 - 但請修改curl_get_info到curl_getinfo。那麼這裏發生了什麼?你能詳細說明嗎?謝謝。 –
由於「CURLOPT_HEADER,TRUE」,您在$ result上使用了json_encode,但是$ result =「頁面頭部」+「頁面正文」,因此您必須提取響應頁面的主體並將json_encode應用於該頁面。準確地說是 – Darm
。對於任何跟隨這個線程的人來說 - 這裏的問題是,當你請求頭文件時,你會將它們與身體打包在一起。 –