Как отправить XML-запрос POST с помощью Guzzle в API веб-сервиса с помощью Laravel? - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь отправить запрос в мой веб-API с помощью клиента Laravel Guzzle Http.Тем не менее я получаю ошибки при попытке отправить запрос.Данные, которые я хочу отправить, представляют собой XML, поскольку контроллер API построен в формате возврата XML.

Я перепробовал все виды методов для отправки запроса с помощью Guzzle, но он еще не работает.

public function createProperty(Request $request)
 {
    $client = new Client();

    $post = $request->all();


    $create = $client->request('POST', 'http://127.0.0.1:5111/admin/hotel', [
        'headers' => [
            'Content-Type' => 'text/xml; charset=UTF8',
        ],
        'form-data' => [
           'Name'           => $post['hotel_name'],
           'Address'        => $post['address'],
           'Phone'          => $post['phone'],
           'Email'          => $post['email'],
           'Website'        => $post['website'],
           'Latitude'       => $post['latitude'],
           'Longitude'      => $post['longitude'],
           'Tags'           => $post['tags'],
           'Priority'       => $post['priority'],
           'Visible'        => $post['visible'],
           'Stars'          => $post['stars'],
           'Description'    => $post['description'], 
           'Facilities'     => $post['facilities'],
           'Policies'       => $post['policies'],
           'ImportantInfo'  => $post['important_info'],
           'MinimumAge'     => $post['minimum_age']
       ]                            
    ]);
    //dd($create->getBody());

    echo $create->getStatusCode();
    echo $create->getHeader('content-type');
    echo $create->getBody();
    $response = $client->send($create);

    $xml_string = preg_replace('/(<\?xml[^?]+?)utf-16/i', '$1utf-8', $create->getBody());
    $xml_string = $create->getBody();
    //dd($xml_string);
    $hotels = simplexml_load_string($xml_string);

    return redirect()->back();
}

Я ожидал, что результат отправит POST в веб-службу и сохранит данные в базе данных, но, тем не менее, я получил ошибку «Ошибка клиента: POST» http://127.0.0.1:5111/admin/hotel', приведшая к 400 неправильным запросам'ответ. Пожалуйста, предоставьте действительный объект XML в теле

1 Ответ

0 голосов
/ 01 февраля 2019

Вместо того, чтобы использовать post-data в запросе на жадность, вам необходимо использовать body:

$create = $client->request('POST', 'http://127.0.0.1:5111/admin/hotel', [
    'headers' => [
        'Content-Type' => 'text/xml; charset=UTF8',
    ],
    'body' => $xml                         
]);

$xml - это данные XML, которые вы хотите отправить в API.Guzzle не будет создавать данные XML для вас, вам нужно будет сделать это самостоятельно.

Данные XML могут быть созданы с использованием класса DomDocument в PHP .

...