如何使用参数发布请求?

如何使用 GuzzleHttp (版本5.0)发布请求。

我正在尝试做以下事情:

$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword'
)
);

但我得到了一个错误:

PHP 致命错误: 未捕获的异常“ InvalidArgumentException”,带有消息“没有方法可以处理电子邮件配置键”

223130 次浏览

试试这个

$client = new \GuzzleHttp\Client();
$client->post(
'http://www.example.com/user/create',
array(
'form_params' => array(
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword'
)
)
);

马可的回答是不赞成的开始,您必须使用以下语法(根据 jasonlfunk 的注释) :

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword',
]
]);

带有 POST 文件的请求

$response = $client->request('POST', 'http://www.example.com/files/post', [
'multipart' => [
[
'name'     => 'file_name',
'contents' => fopen('/path/to/file', 'r')
],
[
'name'     => 'csv_header',
'contents' => 'First Name, Last Name, Username',
'filename' => 'csv_header.csv'
]
]
]);

REST 动词与参数的用法

// PUT
$client->put('http://www.example.com/user/4', [
'body' => [
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword',
],
'timeout' => 5
]);


// DELETE
$client->delete('http://www.example.com/user');

异步 POST 数据

用于长服务器操作。

$client = new \GuzzleHttp\Client();
$promise = $client->requestAsync('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword',
]
]);
$promise->then(
function (ResponseInterface $res) {
echo $res->getStatusCode() . "\n";
},
function (RequestException $e) {
echo $e->getMessage() . "\n";
echo $e->getRequest()->getMethod();
}
);

设定航向

根据 文件,您可以设置标题:

// Set various headers on a request
$client->request('GET', '/get', [
'headers' => [
'User-Agent' => 'testing/1.0',
'Accept'     => 'application/json',
'X-Foo'      => ['Bar', 'Baz']
]
]);

有关调试的更多信息

如果您需要更多的详细信息,您可以使用 debug选项,如下所示:

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
'form_params' => [
'email' => 'test@gmail.com',
'name' => 'Test user',
'password' => 'testpassword',
],
// If you want more informations during request
'debug' => true
]);

文档 更加明确地描述了新的可能性。

注意,在 GuzzleV6.0 + 中,获得以下错误的另一个来源可能是错误地使用 JSON 作为数组:

将“ body”请求选项作为数组传入以发送 POST 请求已被弃用。请使用“ form _ params”请求 选项可以发送应用程序/x-www-form-urlencode 请求,或者发送一个 “ multipart”请求选项来发送一个 multipart/form-data 请求。

错误 :

$response = $client->post('http://example.com/api', [
'body' => [
'name' => 'Example name',
]
])

正确 :

$response = $client->post('http://example.com/api', [
'json' => [
'name' => 'Example name',
]
])

正确 :

$response = $client->post('http://example.com/api', [
'headers' => ['Content-Type' => 'application/json'],
'body' => json_encode([
'name' => 'Example name',
])
])
$client = new \GuzzleHttp\Client();
$request = $client->post('http://demo.website.com/api', [
'body' => json_encode($dataArray)
]);
$response = $request->getBody();

php.ini文件中的 openssl.cafile

您可以直接使用 GuzzleHttp 客户端轻松调用多部分 API 进行图像上传;

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Utils;
use File;


$filename = $req->file('file1')->getClientOriginalName();
$getfilePath  = $req->file('file1')->getRealPath();
$client = new Client();
$response = $client->request('POST', 'http://127.0.0.1:8045/api/uploadImages', [
'multipart' => [
[
'name'     => 'image',
'contents' => fopen($getfilePath, 'r')
],
// 'headers'  => [
//      'Content-Type' => '<Content-type header>'
//  ]
       

]
]);
echo $response->getStatusCode();
$bodyresponcs = $response->getBody();
$result = json_decode($bodyresponcs);
print_r($result->status);