如何在Laravel上的Buzz HTTP客户端的Post请求中添加表单数据?

时间:2014-10-13 05:28:05

标签: php http laravel buzz

我在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;

2 个答案:

答案 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')) );