2016-07-15 25 views
2

ich folgende Fehlermeldung erhalten, wenn ich eine POST-Anfrage so mache:Guzzle 400 Bad Request

Client error: POST http://api.hitbox.tv/auth/login resulted in a 400 Bad Request response: {"success":true,"error":false,"error_msg":"auth_failed"}

Ich bin nicht sicher, ist, dass, weil ich etwas falsch mit meinem guzzle Code

require 'vendor/autoload.php'; 
use GuzzleHttp\Client; 
use GuzzleHttp\Exception\ClientException; 

$client = new Client(["base_uri"=>"http://api.hitbox.tv/"]); 
$data = ["login"=>"myId","pass"=>"mypassword","rememberme"=>"",]; 
try{ 
$response = $client->request("POST","auth/login",["form-params"=>$data,"content-type"=>"application/x-www-form-urlencoded"]); 
} 
catch(ClientException $e){ 

    echo $e->getMessage(); 

} 
catch(InvalidArgumentException $e){ 

    echo $e->getMessage(); 

} 
var_dump(json_decode($response,true)); 

Ich habe die gleiche API mit Javascript XMLHttpRequest versucht, um den gleichen Satz von Daten, wo ich ein Erfolgsergebnis POST haben.

var xmlhttp; 


var data = '{"login":"myId","pass":"myPassword","rememberme":""}'; 

if(window.XMLHttpRequest){ 
    xmlhttp = new XMLHttpRequest();  
} 
else{    
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function(){ 

if(xmlhttp.readyState==4 && xmlhttp.status == 200){ 
    return xmlhttp.responseText; 
} 

xmlhttp.open('POST','https://api.hitbox.tv/auth/login',false); 

xmlhttp.send(data); 

Antwort

1

Sie senden zwei verschiedene Anfragen. Mit JavaScript senden Sie die Daten als JSON im Anfragetext. Mit Guzzle verwenden Sie jedoch form-params, ein anderes Format.

Um dies zu beheben, ersetzen Sie einfach form-params mit Schlüssel json und entfernen Sie "content-type"=>"application/x-www-form-urlencoded".

+0

Ist wirklich Arbeit, danke für Ihren Kommentar, – d3no