PHP Использование cURL и запроса GET с заголовком

В прошлом были более тонкие вопросы, как показано ниже.

Как отправить запрос GET с заголовок из PHP?

Но я не знаю, почему мой код не работает. Я хочу получить «код состояния 200 OK и данные изображения в двоичном формате», используя запрос cURL и GET с заголовком.

Я тоже могу ошибаться при отладке. Буду признателен за любую помощь. Заранее спасибо!

Ссылка на API: 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));

Тогда.. я понял это...

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] ��

person TKasai    schedule 30.12.2016    source источник
comment
Использование print_r недостаточно для определения типа. Рассмотрите возможность использования var_export или var_dump или даже json_encode, которые помогут показать тип данных. Кроме того, вы не выбросили свой $response.   -  person SOFe    schedule 30.12.2016
comment
CURLOPT_POST, false не нужно.   -  person SOFe    schedule 30.12.2016
comment
Вы уверены, что хотите поставить , true за закрывающей скобкой для var_export?   -  person SOFe    schedule 30.12.2016
comment
Я удалил .true, но не могу получить никакого результата...   -  person TKasai    schedule 30.12.2016


Ответы (1)


Согласно документации PHP для CURLOPT_HEADER:

TRUE, чтобы включить заголовок в вывод.

Ваш $response, вероятно, будет выглядеть так:

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

{
    "real": "json content"
}

Это связано с тем, что вы добавили параметр CURLOPT_HEADER.

Вам не нужно устанавливать какие-либо параметры, чтобы запрос curl отправлял ваши заголовки. Если вы установите параметр CURLOPT_HTTPHEADER, заголовки будут отправляться.

Если вы действительно хотите получать заголовки ответов, проверьте существующие вопросы, такие как "Может ли PHP cURL получить заголовки ответа И тело в одном запрос?"

person SOFe    schedule 30.12.2016
comment
Я удалил CURLOPT_HEADER, но все еще не могу получить Json. - person TKasai; 30.12.2016
comment
Сбросьте свой $response, чтобы увидеть, получили ли вы то, что ожидали, и используйте json_last_error_msg, чтобы увидеть точную ошибку. - person SOFe; 30.12.2016
comment
Я пробовал error_log(print_r(ошибка: .json_last_error(),true));. Результат 5. Означает ли это, JSON_ERROR_UTF8?? - person TKasai; 30.12.2016
comment
Распечатайте свой $response, тогда вы увидите, что не так с JSON... - person SOFe; 30.12.2016
comment
Спасибо за вашу помощь! Я изменил свой пост и результат! - person TKasai; 30.12.2016
comment
Я снова изменил свой код, ссылаясь на вашу ссылку. Не могли бы вы проверить это? Спасибо! - person TKasai; 31.12.2016
comment
Почему вы используете error_log(print_r(...), true) вместо error_log(print_r(..., true))... - person SOFe; 31.12.2016
comment
Я не знаю, что случилось, но это начало работать! В любом случае, я очень ценю вашу помощь! - person TKasai; 02.01.2017