我正在使用GET
函数使用SSL和基本身份验证尝试file_get_contents
请求:
$username = "XXXXXXXXXX";
$password = "XXXXXXXXXX";
$url = "https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api";
$context = stream_context_create(array("http" => array("header" => "Authorization: Basic " . base64_encode("$username:$password"))));
$data = file_get_contents($url, false, $context);
echo $data;
以下是我收到的错误消息:
警告:file_get_contents(https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api):无法打开流:HTTP请求失败! HTTP / 1.0 500服务器错误...
我已经确认openssl
已启用:
我们不妨预先解决这个问题:
为什么不使用cURL?
我可以。但我也想弄清楚file_get_contents
无效的原因。我喜欢file_get_contents
的相对简单性。叫我疯了。
答案 0 :(得分:0)
好奇心是一件好事,所以在解决这个问题之前不要回到cURL这个问题很酷。
<?php
$username = "XXXXXXXXXX";
$password = "XXXXXXXXXX";
$url = "https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api";
$context = stream_context_create(array(
"http" => array(
"header" => "Authorization: Basic " . base64_encode("$username:$password"),
"protocol_version" => 1.1, //IMPORTANT IS HERE
)));
$data = file_get_contents($url, false, $context);
echo $data;
事实是服务器不支持HTTP / 1.0。因此,您对SLL / TLS以及您的用户代理没有任何问题,就这样。它只是支持HTTP / 1.1的服务器 如果它适用于我们的Web浏览器,那是因为它们也使用HTTP / 1.1。
如stream_context_create文档中所述, stream_context_create 中使用的默认 protocol_version 为1.0。这就是您收到错误500的原因。
注意:在此示例中,我获得了401,因为我的凭据错误。这意味着我成功点击了服务器,如果我的凭据有效,一切都会好的。
答案 1 :(得分:-1)
$username = "XXXXXXXXXX";
$password = "XXXXXXXXXX";
$url = "https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api";
$context = stream_context_create(array(
"http" => array("header" => "Authorization: Basic " . base64_encode("$username:$password")),
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
)));
$data = file_get_contents($url, false, $context);
echo $data;