2016-12-30 124 views
3

過去有像以下這樣的更簡單的問題。PHP使用帶標題的cURL和GET請求

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

但我不知道爲什麼我的代碼不能正常工作。 我想通過使用帶標頭的cURL和GET請求來獲得「狀態碼200 OK和二進制圖像數據」。

我也可能在調試時出錯。 我會感謝您的任何幫助。 在此先感謝!

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)); 

然後..我得到這個...

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

現有的問題,使用'print_r'是信息不足知道的類型。考慮使用'var_export'或'var_dump'甚至'json_encode',這將有助於顯示數據類型。另外,你沒有轉儲你的'$ response'。 – SOFe

+0

'CURLOPT_POST,false'沒有必要。 – SOFe

+0

您確定要將',true'放在'var_export'的右括號後面嗎? – SOFe

回答

1

據爲CURLOPT_HEADER PHP文件:

TRUE到包括輸出中的標題。

$response可能會是這樣的:

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

{ 
    "real": "json content" 
} 

這是因爲你添加的CURLOPT_HEADER選項。

您不需要設置任何選項來讓curl請求發送您的標題。只要您設置CURLOPT_HTTPHEADER選項,標題將被髮送。

如果你真的想收到的響應頭太,像檢查https://stackoverflow.com/a/9183272/3990767

+0

我刪除了「CURLOPT_HEADER」,但仍然無法獲得Json。 – TKasai

+1

轉儲您的'$ response'以查看您是否得到了您所期望的,並使用'json_last_error_msg'來查看確切的錯誤。 – SOFe

+0

我試過「error_log(print_r(」error is:「.json_last_error(),true));」。結果是「5」。這是否意味着,JSON_ERROR_UTF8 ?? – TKasai