我正在尝试使用Laravel Guzzle Http客户端将请求发布到我的Web API。但是,尝试发布请求时遇到错误。我要发送的数据是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();
}
我希望将结果发布到Web服务并将数据保存到数据库,但是我收到了错误“客户端错误:POST'http://127.0.0.1:5111/admin/hotel',导致了'400错误的请求'响应。请提供一个正文中有效的XML对象
答案 0 :(得分:1)
您无需使用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
将是您要发送到API的XML数据。 Guzzle不会为您创建XML数据,您需要自己做。
可以使用DomDocument
class in PHP创建XML数据。
答案 1 :(得分:0)
如果您使用的是 Laravel 7+,这条简单的代码应该可以很好地工作
$xml = "<?xml version='1.0' encoding='utf-8'?><body></body>";
Http::withHeaders(["Content-Type" => "text/xml;charset=utf-8"])
->post('https://destination.url/api/action', ['body' => $xml]);