我正在尝试从需要通过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);
我是否有任何特殊原因无法从经过身份验证的服务器获取数据?
答案 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变量。