2016-07-15 101 views
2

我拿到的时候我在做一个POST请求以下错误:狂饮400错误的请求

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

我已经尝试过使用Javascript XMLHttpRequest发布相同的数据集,我在哪里获得了成功结果。

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