Nir Pengas
Nir Pengas

Reputation: 990

no post data returned when requesting headers CURLOPT_HEADER. PHP CURL

i am making a POST request using curl and PHP, sending a username/password array as a JSON object.

so far all is working wonderfully. now i wanted to read the headers so i can parse the cookie. i know i can use a file/jar and have tested that - works well. i want to not write a thing to disk.

so i flagged CURLOPT_HEADER as TRUE and i can parse the cookie value.

HOWEVER - the returned data is gone. totally gone... when i flag _HEADER FALSE - i see the response.

the code:

    $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...

i've been digging through different posts and it seems the order of the opts makes a difference. tried moving them about - no luck.

thoughts?!

Upvotes: 0

Views: 3597

Answers (2)

Darm
Darm

Reputation: 5659

Use:

$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>';

Upvotes: 2

lovesh
lovesh

Reputation: 5401

try this

curl_setopt($ch,CURLOPT_NOBODY,false)

Upvotes: 0

Related Questions