duanlin1931 2017-10-12 21:04
浏览 298
已采纳

PHP file_get_contents提供HTTP代码401 Unauthorized

I try to make an authenticated HTTP GET request but I get a 401 HTTP error. I am sure that the signature is right. Because of that, I think the problem is in the multiple headers on line 18. But I can't find the exact problem unfortunately.

Warning: file_get_contents(http://test.com/path): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in /home/host/path.php on line 22

<?php
$apiKey = '1';
$apiSecret = '2';

$verb = 'GET';

$path = '/path';
$nonce = '1';
$data = '';

$signature = hash_hmac('sha256', $verb . $path . $nonce . $data, $apiSecret);

$url="http://test.com/path"; 

$opts = [
    "http" => [
        "method" => $verb,
        "header" => "api-nonce: ".$nonce. "
", "api-key: " .$apiKey. "
", "api-signature: " . $signature
    ]
];
$context = stream_context_create($opts);
$json = file_get_contents($url, false, $context);

if($json){
    $data = @json_decode($json, TRUE);

    print_r($data);
}
?>
  • 写回答

1条回答 默认 最新

  • douhao2856 2017-10-12 21:32
    关注

    You had a wrong format on line 18. You used commas to seperate the headers, instead you should just concatenate them as one string:

    "header" => "api-nonce: ".$nonce. "
    " . "api-key: " .$apiKey. "
    " . "api-signature: " . $signature . "
    "
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?