PHP文件\u get\u内容返回时出现400错误

PHP文件\u get\u内容返回时出现400错误,php,json,Php,Json,我的问题很简单,但我一辈子都搞不清楚到底出了什么问题。我用另一个API做了类似的事情,但它讨厌我 基本上,我试图从中获取信息,并使用JSON结果获取用户的基本信息。但每当我尝试使用file\u get\u内容时,它都会返回 Warning: file_get_contents(https://owapi.net/api/v3/u/Xvs-1176/blob): failed to open stream: HTTP request failed! HTTP/1.1 400 BAD REQUEST

我的问题很简单,但我一辈子都搞不清楚到底出了什么问题。我用另一个API做了类似的事情,但它讨厌我

基本上,我试图从中获取信息,并使用JSON结果获取用户的基本信息。但每当我尝试使用file\u get\u内容时,它都会返回

Warning: file_get_contents(https://owapi.net/api/v3/u/Xvs-1176/blob): failed to open stream: HTTP request failed! HTTP/1.1 400 BAD REQUEST in Z:\DevProjects\Client Work\Overwatch Boost\dashboard.php on line
所以我不知道到底出了什么问题。我的代码可以在这里看到:

$apiBaseURL = "https://owapi.net/api/v3/u";
$apiUserInfo = $gUsername;
$apiFullURL = $apiBaseURL.'/'.$apiUserInfo.'/blob';

$apiGetFile = file_get_contents($apiFullURL);

任何帮助都将不胜感激。谢谢大家!

您需要像这样为file\u get\u内容设置用户代理,您可以使用此代码进行检查。请参阅,了解文件获取内容的设置用户代理

<?php
$options  = array('http' => array('user_agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0'));
$context  = stream_context_create($options);
$response = file_get_contents('https://owapi.net/api/v3/u/Xvs-1176/blob', false, $context);
print_r($response);                  

这就是page发送的内容:“嗨!为了防止滥用此服务,您需要自定义您的用户代理”。
您可以像这样使用curl对其进行自定义:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://owapi.net/api/v3/u/Xvs-1176/blob"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
$output = curl_exec($ch);   

$output = json_decode($output);

if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
  var_dump($output);
}

curl_close($ch);

如果你做了
curl-vhttps://owapi.net/api/v3/u/Xvs-1176/blob
您将得到一个响应,您将看到cURL默认包含的标题。即:

> Host: owapi.net
> User-Agent: curl/7.47.0
> Accept: */*
那么问题是,owapi关心哪一个?那么,您可以停止cURL发送默认头,如下所示:

curl -H "Accept:" -H "User-Agent:" -H "Host:" https://owapi.net/api/v3/u/Xvs-1176/blob
。。。你会得到400的回复。实验上,如果您不使用“主机”或“用户代理”标题,您会得到以下结果:


事实证明,您实际上不需要“Accept”标题。有关如何随文件内容一起发送标题的信息,请参见PHP。

如果$gUsername=“Xvs-1176”?@vicatcu我已经编辑并检查了它,这与OP所做的有什么不同。你现在可以查一下。谢谢你的评论。正如@vicatcu所说,这肯定是标题问题。非常感谢你们两位的回答:在调用file\u get\u contents之前是否可以回显$APIFULLRL?您缺少了一些它期望的头(猜测),在本地测试了相同的结果,try curl()400是一个错误的请求错误,这意味着您可能没有提供请求的头或其他数据expecting@vicatcu是的,它呼应“。我得到的所有返回的可能重复项是“Z:\DevProjects\Client Work\Overwatch Boost\dashboard.php:89:”和null。@SDC哦,是的,您必须使用$outputvariable@SDC只需打印r($output)@SDC我已经为您解码了json,$output=json_decode($output)是什么时候开始的。如果这不是您想要的行为,请删除此字符串。
<?php
$options  = array('http' => array('user_agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0'));
$context  = stream_context_create($options);
$response = file_get_contents('https://owapi.net/api/v3/u/Xvs-1176/blob', false, $context);
print_r($response);