2017-05-03 6 views
1

Mein Problem ist ziemlich einfach, aber ich kann nicht für das Leben von mir herausfinden, was falsch ist. Ich habe etwas Ähnliches mit einer anderen API gemacht, aber das hasst mich einfach.PHP file_get_contents kehrt mit einem 400 Error

Im Grunde versuche ich Informationen von https://owapi.net/api/v3/u/Xvs-1176/blob zu erhalten und das JSON-Ergebnis zu verwenden, um grundlegende Informationen über den Benutzer zu erhalten. Aber wenn ich versuche, file_get_contents zu verwenden, es gibt nur

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 

Also ich weiß nicht, was falsch ist, genau. Mein Code ist hier zu sehen:

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

$apiGetFile = file_get_contents($apiFullURL); 

Jede Hilfe ist weitgehend anerkannt. Vielen Dank!

+1

Können Sie $ apiFullURL kurz vor dem Aufruf von file_get_contents echo? – vicatcu

+1

Ihr fehlt einige Header es erwartet (bei einer Schätzung), getestet lokal das gleiche Ergebnis, versuchen curl() – nogad

+1

400 ist eine schlechte Anfrage Fehler bedeutet, dass Sie wahrscheinlich keine Header oder zusätzliche Daten die Anfrage erwartet –

Antwort

1

Sie müssen User Agent für file_get_contents wie folgt festlegen, und Sie können es mit diesem Code überprüfen. Informationen zum Festlegen des Benutzeragenten für file_get_contents finden Sie unter 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

Wie unterscheidet sich das von dem OP? , wenn $ gUsername = "Xvs-1176"? – vicatcu

+1

@vicatcu Ich habe es bearbeitet und überprüft. Sie können es jetzt überprüfen. Thans für deinen Kommentar. –

+0

Wie @vicatcu feststellt, war es definitiv das Header-Problem. Vielen Dank für Ihre Antworten: D – SDC

1

Das ist, was Seite sendet: „Hallo Missbrauch dieses Dienstes zu vermeiden, ist es erforderlich, dass Sie Ihren User-Agent anpassen“. Sie können es so mit curl anpassen:

$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); 
+0

Ich bekomme nur "Z: \ DevProjects \ Client Arbeit \ Overwatch Boost \ dashboard.php: 89:" und null zurück. – SDC

+1

Wörtlich dieser Code machte es für mich – Alagunto

+1

@SDC Oh, ja, Sie müssen die $ output-Variable verwenden – Alagunto

1

Wenn Sie curl -v https://owapi.net/api/v3/u/Xvs-1176/blob tun, werden Sie eine Antwort erhalten und Sie werden sehen, was Header cURL standardmäßig enthält. Nämlich:

> Host: owapi.net 
> User-Agent: curl/7.47.0 
> Accept: */* 

Also dann ist die Frage, über welche man sich kümmert? Nun, Sie können cURL davon abhalten, die Standard-Header wie folgt zu senden:

curl -H "Accept:" -H "User-Agent:" -H "Host:" https://owapi.net/api/v3/u/Xvs-1176/blob 

... und Sie werden in der Tat eine 400 Antwort bekommen. Experimentell ist hier, was Sie zurück, wenn Sie den „Host“ oder „User-Agent“ Header lassen sich aus:

{"_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."} 

Sie tatsächlich den „Accept“ Header nicht benötigen, wie sich herausstellt. In PHP docs erfahren Sie, wie Header zusammen mit file_get_contents gesendet werden.

Verwandte Themen