2016-07-15 11 views
2

Я получаю следующее сообщение об ошибке, когда я делаю запрос POST:жрать 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"}

я не уверен, что, потому что я ничего плохого с моим жрать кодом

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

Я пробовал один и тот же api с Javascript XMLHttpRequest для POST того же набора данных, где я получил результат успеха.

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

ответ

1

Вы отправляете два разных запроса. С помощью JavaScript вы отправляете данные как JSON в тело запроса. Однако с помощью Guzzle вы используете form-params, который отличается от формата.

Чтобы исправить это, просто замените form-params ключ json и удалите "content-type"=>"application/x-www-form-urlencoded".

+0

Действительно, работайте, спасибо за ваш комментарий, – d3no