web-dev-qa-db-fra.com

Bonne façon d'envoyer (POST) xml avec guzzle 6

Je veux effectuer un post avec guzzle en envoyant un fichier xml. Je n'ai pas trouvé d'exemple.

Ce que j'ai fait jusqu'à présent, c'est:

$xml2=simplexml_load_string($xml) or die("Error: Cannot create object");
use    GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
$client = new Client();
//
$request = new Request('POST', $uri, [ 'body'=>$xml]);
$response = $client->send($request);
 //
//$code = $response->getStatusCode(); // 200
//$reason = $response->getReasonPhrase(); // OK
 //
 echo $response->getBody();

Peu importe ce que j'essaye, je récupère l'erreur -1, ce qui signifie que xml n'est pas valide. Le XML que j'envoie passe cependant la validation en ligne et est valide% 100

Veuillez aider.

17
user3485417

Après quelques expériences, je l'ai compris. Voici ma solution au cas où quelqu'un arriverait dans une impasse.

$request = new Request(
    'POST', 
    $uri,
    ['Content-Type' => 'text/xml; charset=UTF8'],
    $xml
);
21
user3485417

C'est ce qui a fonctionné pour moi sur Guzzle 6:

// configure options
$options = [
    'headers' => [
        'Content-Type' => 'text/xml; charset=UTF8',
    ],
    'body' => $xml,
];

$response = $client->request('POST', $url, $options);
18
Abz

Si vous souhaitez envoyer du xml à l'aide de la méthode post, voici un exemple:

$guzzle->post($url, ['body' => $xmlContent]);
3
Shaolin

Vous pouvez le faire d'une manière ci-dessous

$xml_body = 'Your xml body';
$request_uri = 'your uri'
$client = new Client();
$response = $client->request('POST', $request_uri, [
              'headers' => [
                 'Content-Type' => 'text/xml'
               ],
              'body'   => $xml_body
            ]);
0
user3785966