PHP HTTP / 1.0 400带有授权标头的API请求的错误请求

时间:2017-02-06 00:20:31

标签: php authentication https

我正在尝试从需要通过HTTPS进行身份验证的API中检索一些数据。我有正确的身份验证,但是当使用'file_get_contents'获取数据时,我收到错误:

  

无法打开流:HTTP请求失败! HTTP / 1.0 400错误请求

$api_url = 'https://api...';

$client_id = 'user';
$client_secret = 'pass';

$context = stream_context_create(array(
    'http' => array(
        'header' => "Authorization: Basic " . base64_encode("$client_id:$client_secret"),
    ),
));

$result = file_get_contents($api_url, false, $context);

我是否有任何特殊原因无法从经过身份验证的服务器获取数据?

3 个答案:

答案 0 :(得分:1)

您正在以正确的方式进行身份验证。 php代码是正确的。

我认为问题是请求的网址。 因为响应返回400代码,这意味着身份验证有效但API的请求URL是错误的。

代码400:请求不正确,例如请求中有一些错误或缺少的参数。

Code 401:未经授权。 (不是你的情况)

有了这个信息,我们根本无法帮助你。 检查网址参数,如果可以,请阅读api文档或发布更多关于网址或api的信息:)

Byee

编辑解决方案:

检查url是否有一些特殊字符或空格。也许你只需要编码网址。

警告:不要编码所有网址,只编码参数值。

示例:

 http ://example.com/test?file=This is a file.txt

为:

 http ://example.com/test?file=This%20is%20a%20file.txt

答案 1 :(得分:0)

您的header密钥的值应该是包含请求标头的数组:

$api_url = 'https://api...';

$client_id = 'user';
$client_secret = 'pass';

$context = stream_context_create(array(
    'http' => array(
        'header' => array("Authorization: Basic " . base64_encode("$client_id:$client_secret"))
                 // ^ check here
    ),
));

$result = file_get_contents($api_url, false, $context);

答案 2 :(得分:0)

Http错误400表示“错误请求”。

远程服务器对您的请求不满意。也许您没有正确构建$ context变量。