4

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] ��
4
  • Using print_r is insufficient information to know the type. Consider using var_export or var_dump or even json_encode, which will help show the data type. Also, you didn't dump your $response. Commented Dec 30, 2016 at 13:09
  • CURLOPT_POST, false is not necessary. Commented Dec 30, 2016 at 13:48
  • Are you sure you want to put the , true behind the closing parenthesis for var_export? Commented Dec 30, 2016 at 14:10
  • I deleted ".true" but can't get any result... Commented Dec 30, 2016 at 14:15

1 Answer 1

1

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?"

Sign up to request clarification or add additional context in comments.

8 Comments

Ive deleted "CURLOPT_HEADER" but still can't get a Json.
Dump your $response to see if you have got what you expected, and use json_last_error_msg to see the exact error.
Ive tried "error_log(print_r("error is : ".json_last_error(),true));". The result is "5." Does this mean, JSON_ERROR_UTF8??
Print your $response, then you will see what is wrong with the JSON...
Thanks for your help! Ive modified my post and result!
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.