PHP file_get_contents返回400错误

时间:2017-05-03 02:18:28

标签: php json

我的问题很简单,但我不能为我的生活弄清楚出了什么问题。我用其他API做了类似的事情,但这只是讨厌我。

基本上,我正在尝试从https://owapi.net/api/v3/u/Xvs-1176/blob获取信息并使用JSON结果来获取用户的基本信息。但每当我尝试使用file_get_contents时,它只返回

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);

任何帮助都会受到很大的赞赏。谢谢!

3 个答案:

答案 0 :(得分:1)

您需要像这样设置file_get_contents的用户代理,您可以使用此代码进行检查。有关file_get_contents的set user agent,请参阅 this

<?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);                  

答案 1 :(得分:1)

那是什么页面正在发送:&#34;嗨!为防止滥用此服务,您需要自定义用户代理&#34;。 您可以使用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);

答案 2 :(得分:1)

如果您执行curl -v https://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回应。从实验上来说,如果你放弃了主持人的话,你会得到什么。或&#34;用户代理&#34;头:

{"_request": {"api_ver": 3, "route": "/api/v3/u/Xvs-1176/blob"}, "error": 400, "msg": "Hi! To prevent abuse of this service, it is required that you customize your user agent."}

你实际上并不需要&#34;接受&#34;标题,事实证明。请参阅PHP docs,了解如何与file_get_contents一起发送标题。