我的问题很简单,但我不能为我的生活弄清楚出了什么问题。我用其他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);
任何帮助都会受到很大的赞赏。谢谢!
答案 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一起发送标题。