composer - PHP GuzzleHttp. ¿Cómo hacer una solicitud de publicación con params?
guzzlehttp lumen (4)
Cómo realizar una solicitud de publicación con GuzzleHttp (versión 5.0).
Estoy tratando de hacer lo siguiente:
$client = new /GuzzleHttp/Client();
$client->post(
''http://www.example.com/user/create'',
array(
''email'' => ''[email protected]'',
''name'' => ''Test user'',
''password'' => ''testpassword''
)
);
Pero recibo el error:
Error fatal de PHP: excepción no detectada ''InvalidArgumentException'' con el mensaje ''Ningún método puede manejar la clave de configuración del correo electrónico''
Como la respuesta de Marco está en desuso , debe usar la siguiente sintaxis (según el comentario de jasonlfunk):
$client = new /GuzzleHttp/Client();
$response = $client->request(''POST'', ''http://www.example.com/user/create'', [
''form_params'' => [
''email'' => ''[email protected]'',
''name'' => ''Test user'',
''password'' => ''testpassword'',
]
]);
Solicitud con archivos 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''
]
]
]);
Uso de verbos REST con params
// PUT
$client->put(''http://www.example.com/user/4'', [
''body'' => [
''email'' => ''[email protected]'',
''name'' => ''Test user'',
''password'' => ''testpassword'',
],
''timeout'' => 5
]);
// DELETE
$client->delete(''http://www.example.com/user'');
Datos POST asíncronos
Útil para largas operaciones de servidor.
$client = new /GuzzleHttp/Client();
$promise = $client->requestAsync(''POST'', ''http://www.example.com/user/create'', [
''form_params'' => [
''email'' => ''[email protected]'',
''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();
}
);
Más información para depurar
Si desea obtener más información detallada, puede usar la opción de
debug
como esta:
$client = new /GuzzleHttp/Client();
$response = $client->request(''POST'', ''http://www.example.com/user/create'', [
''form_params'' => [
''email'' => ''[email protected]'',
''name'' => ''Test user'',
''password'' => ''testpassword'',
],
// If you want more informations during request
''debug'' => true
]);
Documentation es más explícita sobre nuevas posibilidades.
Prueba esto
$client = new /GuzzleHttp/Client();
$client->post(
''http://www.example.com/user/create'',
array(
''body'' => array(
''email'' => ''[email protected]'',
''name'' => ''Test user'',
''password'' => ''testpassword''
)
)
);
Tenga en cuenta en Guzzle V6.0 +, otra fuente de obtener el siguiente error puede ser el uso incorrecto de JSON como una matriz:
Pasar la opción de solicitud "cuerpo" como una matriz para enviar una solicitud POST ha quedado en desuso. Utilice la opción de solicitud "form_params" para enviar una solicitud application / x-www-form-urlencoded, o la opción de solicitud "multipart" para enviar una solicitud multipart / form-data.
Incorrecto :
$response = $client->post(''http://example.com/api'', [
''body'' => [
''name'' => ''Example name'',
]
])
Correcto :
$response = $client->post(''http://example.com/api'', [
''json'' => [
''name'' => ''Example name'',
]
])
Correcto :
$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();
Añadir
openssl.cafile
en el archivo
php.ini