我在Laravel中使用Buzz HTTP Client。
我在将表单数据添加到POST请求时遇到问题,因为它没有在其wiki / documentation中指定。
下面列出了两种发送请求的方式。
示例1:
$response = Buzz::post('http://api.website.com/login');
//how do I add a "username", and "password" field in my POST request?
echo $response;
echo $response->getContent;
示例2:
$request = new Buzz\Message\Request('POST', '/', 'http://google.com');
$response = new Buzz\Message\Response();
//how do I add a "username", and "password" field in my POST request?
$client = new Buzz\Client\FileGetContents();
$client->send($request, $response);
echo $request;
echo $response;
答案 0 :(得分:3)
这里的答案实际上取决于API的期望。让我们假设,API期望在请求的内容中将密码和用户名作为JSON发送。示例http请求看起来像:
POST /login HTTP/1.1
Content-Type: application/json
{
"username": "bugsBunny",
"password": "wh4tsUpD0c"
}
要使用Buzz执行此操作,这应该可行:
$jsonPayload = json_encode([
‘username’ => ‘bugsBunny’,
‘password’ => ‘wh4tsUpD0c
]);
$headers = ['Content-Type', 'application/json'];
$response = Buzz::post('http://api.website.com/login', $headers, $jsonPayload);
如果您尝试在指定网站上提交表单,则不应使用上述方法。而是使用Buzz的内置表单方法,它将附加正确的标题。
use Buzz\Message\Form;
$request = new Form(Form::METHOD_POST, ‘login’, ‘api.website.com’);
$request->setFields([
‘username’ => ‘bugsBunny’,
‘password’ => ‘wh4tsUpD0c’
]);
$response = new Buzz\Message\Response();
$client = new Buzz\Client\Curl();
$client->send($request, $response);
在旁注中,我建议不要使用此库。正如您所说,该库是针对Buzz的Laravel集成。这里的问题是,作者应该在作曲家中列出一个依赖关系,而不是直接包含Buzz源。这可以防止Buzz的更新进入此项目。您可以在实际Buzz repo上看到,最后一次提交是29天前。此外,如果另一个包使用Buzz并由作曲家正确包含它,composer将安装这两个包。但是当创建一个Buzz实例时,您无法确定正在加载哪个版本。您应该使用Buzz,可以在packagist上找到。
// assuming $headers and $jsonPayload are the same as in previous example.
$browser = new Buzz\Browser();
$response = $browser->post('http://api.website.com/login', $headers, $jsonPayload);
答案 1 :(得分:0)
在问之前先不读代码是愚蠢的。
表单数据实际上是基于该函数的第三个参数。虽然它只接受字符串,所以不要忘记对你的数据进行json编码。
Buzz Class
public function post($url, $headers = array(), $content = '')
{
....
....
}
Buzz::post($url, array(), json_encode(array('Username'=>'usernamexx','Password'=>'p@$$w0rD')) );