0

我正在为 Laravel使用Buzz HTTP 客户端。

我在将表单数据添加到我的 POST 请求时遇到问题,因为它没有在它的 wiki/文档中指定。

下面列出了发送请求的两种方式。

示例 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;
4

2 回答 2

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 作为 Composer 中列出的依赖项,而不是直接包含 Buzz 源。这可以防止 Buzz 的更新进入此项目。你可以在实际的Buzz repo上看到,最后一次提交是 29 天前。此外,如果另一个包正在使用 Buzz 并由 composer 正确包含它,则 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);
于 2014-10-13T07:30:34.940 回答
0

在询问之前不先阅读代码是我的愚蠢行为。

表单数据实际上是在函数的第三个参数上传递的。虽然它只接受字符串,但不要忘记对您的数据进行 json 编码。

Buzz Class

public function post($url, $headers = array(), $content = '')
{
....
....
}

Buzz::post($url, array(), json_encode(array('Username'=>'usernamexx','Password'=>'p@$$w0rD')) );
于 2014-10-13T07:31:38.027 回答