2011-07-26 22 views
0

私はcurlとPHPを使用してPOSTリクエストを作成しています。ユーザー名とパスワードの配列をJSONオブジェクトとして送信しています。ヘッダーCURLOPT_HEADERを要求したときに投稿データが返されません。 PHP CURL

これまでのところすべてがうまくいっています。今私はヘッダーを読んで、私はクッキーを解析できるようにしたかった。私はファイル/ jarを使うことができ、それをテストしたことを知っています。私はディスクに物を書いてはいけません。

私はCURLOPT_HEADERをTRUEに設定しました。私はそのクッキー値を解析できます。

HOWEVER - 返されたデータはなくなりました。完全に消えた... 私は_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の順序が違いになりそうです。彼らを動かそうとした - 運がない。

考えですか?

答えて

2

用途:

$body=mb_substr($result, curl_getinfo($ch,CURLINFO_HEADER_SIZE)); 
$response = json_decode($body); 
$user_id = $response->user->id; 
echo 'user_id: ' . $user_id . '<br>'; 
+0

を試してみてください、これはトリックをやっているように見える - curl_getinfoするcurl_get_infoを変更してくださいのに。ここで何が起こっているのですか?あなたは精緻化できますか?ありがとう。 –

+0

"CURLOPT_HEADER、TRUE"のため、$ resultでは$ result = "ページの本文" + "body"のjson_encodeを使用していますので、応答ページの本文を抽出してjson_encodeを適用する必要があります。 – Darm

+0

。このスレッドの後続の誰かのために、ここでの問題は、ヘッダーを要求すると、そのヘッダーが本文に詰め込まれることです。 –

0

この

ますcurl_setopt($ falseにchを、CURLOPT_NOBODY、)

+0

私の投稿に言及するのを忘れてしまった、私はこれを試して、それは動作しませんでした... –

関連する問題