file_get_contents - 无法打开流:HTTP 请求失败

file_get_contents - failed to open stream: HTTP request failed

当我尝试将 url 值传递给 "file_get_content" 时出现以下错误:

file_get_contents(https://api.sandbox.amadeus.com/v1.2/flights/low-fare-search?origin=$origin&destination=$destination&departure_date=$departure_date&return_date=$return_date&number_of_results=$number_of_results&apikey=$apikey): failed to open stream: HTTP request failed! HTTP/1.1 401

我阅读了不同的可能解决方案,但 none 似乎对我有效

$origin = $_GET['origin'];
$destination = $_GET['destination'];
$departure_date = $_GET['departure_date'];
$return_date = $_GET['return_date'];
$number_of_results = $_GET['number_of_results'];
$apikey = "sdflsdksdksdsdskd";

ini_set("allow_url_fopen", 1);

$json_url = file_get_contents('https://api.sandbox.amadeus.com/v1.2/flights/low-fare-search?origin=$origin&destination=$destination&departure_date=$departure_date&return_date=$return_date&number_of_results=$number_of_results&apikey=$apikey');

$json_url 的结果是一个简单有效的 JSON 任何帮助将不胜感激。

编辑: 问题不在于 API 密钥,当我对其进行硬编码时,错误代码不同(400 Bad Request),但仍然 file_get_contents - 无法打开流:HTTP 请求失败

如评论中所述,HTTP 401 表示未经授权,因此您没有为请求提供正确的身份验证。此外,如果您在浏览器中打开 url 或阅读响应的消息正文,您会看到它显示

"A valid API key is required to access this resource. Please ensure your request includes a query parameter called apikey, whose value is a valid API key from your account at https://sandbox.amadeus.com"

这应该可以很清楚地解释问题:您没有发送 api 密钥。

你的问题的根本原因在我看来是这样的:

file_get_contents('https://api.sandbox.amadeus.com/v1.2/flights/low-fare-search?origin=$origin&destination=$destination&departure_date=$departure_date&return_date=$return_date&number_of_results=$number_of_results&apikey=$apikey');

你在这里使用了单引号 ('),但是如果你想在你的字符串中使用诸如 $departure_date 这样的变量,你需要使用双引号 (") 为你的字符串。

问题是由于 '.
,您的 url 是按字面意思读取的 如果您使用 " 那么字符串中的变量将用作变量,但现在您的字符串是 '...apikey=$api' 而不是 '...apikey=sdflsdksdksdsdskd'

所以换行

$json_url = file_get_contents('https://api.sandbox.amadeus.com/v1.2/flights/low-fare-search?origin=$origin&destination=$destination&departure_date=$departure_date&return_date=$return_date&number_of_results=$number_of_results&apikey=$apikey');

$json_url = file_get_contents("https://api.sandbox.amadeus.com/v1.2/flights/low-fare-search?origin=$origin&destination=$destination&departure_date=$departure_date&return_date=$return_date&number_of_results=$number_of_results&apikey=$apikey");