PHP Using cURL and GET request with a header

14,164

According to PHP documentation for CURLOPT_HEADER:

TRUE to include the header in the output.

Your $response will probably look like this:

HTTP/1.1 200 OK
Some: headers
More: header lines

{
    "real": "json content"
}

This is because you added the CURLOPT_HEADER option.

You don't need to set any options to let the curl request send your headers. As long as you set the CURLOPT_HTTPHEADER option, the headers will be sent.

If you really want to receive the response headers too, check existing questions like "Can PHP cURL retrieve response headers AND body in a single request?"

Share:
14,164
TKasai
Author by

TKasai

Updated on June 04, 2022

Comments

  • TKasai
    TKasai about 2 years

    There are slimier questions in the past like below.

    How do I send a GET request with a header from PHP?

    But I don't know why my code is not working. I want to get "status code 200 OK and image data in binary" by using cURL and GET request with a header.

    I may make mistake on debugging too. I would appreciate your any help. Thanks in advance!

    API refrence: https://devdocs.line.me/en/#get-content

    $url = "https://api.line.me/v2/bot/message/". $message_id. "/content";
    $curl = curl_init("$url");
    error_log(var_export($curl));
    
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Authorization: Bearer ' . $accessToken,
    ));
    
    $response = curl_exec($curl);
    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $header_size);
    $image_binary = substr($response, $header_size);
    curl_close($curl);
    
    error_log(print_r("xxx...",true));
    error_log(var_export($response));
    error_log(print_r("aaa...",true));
    error_log(print_r($response,true));
    error_log(print_r("bbb...",true));
    error_log(print_r($header,true));
    error_log(print_r("ccc...",true));
    error_log(print_r($image_binary,true));
    

    Then.. I get this...

    2017-01-01T01:04:48.272544+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] 
    2017-01-01T01:04:48.911005+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] xxx...
    2017-01-01T01:04:48.911023+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] 
    2017-01-01T01:04:48.911063+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] aaa...
    2017-01-01T01:04:48.911125+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] ����
    2017-01-01T01:04:48.911165+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] bbb...
    2017-01-01T01:04:48.911201+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] ����
    2017-01-01T01:04:48.911239+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] ccc...
    2017-01-01T01:04:48.911273+00:00 app[web.1]: [01-Jan-2017 10:04:48 Asia/Tokyo] ��
    
  • TKasai
    TKasai over 7 years
    Ive deleted "CURLOPT_HEADER" but still can't get a Json.
  • SOFe
    SOFe over 7 years
    Dump your $response to see if you have got what you expected, and use json_last_error_msg to see the exact error.
  • TKasai
    TKasai over 7 years
    Ive tried "error_log(print_r("error is : ".json_last_error(),true));". The result is "5." Does this mean, JSON_ERROR_UTF8??
  • SOFe
    SOFe over 7 years
    Print your $response, then you will see what is wrong with the JSON...
  • TKasai
    TKasai over 7 years
    Thanks for your help! Ive modified my post and result!
  • TKasai
    TKasai over 7 years
    I've modifed my code again referring to your link. Could you check it? Thanks!
  • SOFe
    SOFe over 7 years
    Why do you use error_log(print_r(...), true) instead of error_log(print_r(..., true))...
  • TKasai
    TKasai over 7 years
    I don't know what happened but it started working! Anyway, I really appreciate your help!