Guzzle 400 Bad Request

时间:2016-07-15 07:51:36

标签: php oauth-2.0 xmlhttprequest guzzle guzzle6

我在执行POST请求时收到以下错误:

  

客户端错误:POST http://api.hitbox.tv/auth/login导致400 Bad Request响应:{“成功”:true,“错误”:false,“error_msg”:“auth_failed”}

我不确定,是因为我的guzzle代码有什么问题

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使用相同的api来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 个答案:

答案 0 :(得分:1)

您正在发送两个不同的请求。使用JavaScript,您可以在请求正文中将数据作为JSON发送。但是,使用Guzzle,您使用的是form-params,这是一种不同的格式。

要解决此问题,只需将form-params密钥替换为json,然后删除"content-type"=>"application/x-www-form-urlencoded"