我在Laravel 5.8项目中使用Guzzle已有一段时间了。它已经与支持JSON格式的Restful API一起使用。
现在有一个新的Restful API,仅支持XML
格式。我不知道如何使用Guzzle
来做到这一点。以下是HTTP请求的外观示例。
POST: http://api.url_endpoint.com/my_api.ashx HTTP/1.1
Content-Type: application/x-www-form-url encoded
Host: http://api.url_endpoint.com
Content-Length: 467
Expect: 100-continue
Connection: Close
<Section>
<LoginDetails>
<Login>ABC</Login>
<Password>ABCDE</Password>
</LoginDetails>
</Section>
在文档中说:The XML should be in the body of the request.
问题1.如何将XML放入请求的正文中?
问题2。请注意HTTP/1.1
,是否应将其串联为API URL端点的后缀?
这就是我尝试过的方式。
$header_options = [
'headers' => [
'Accept' => 'application/xml',
'Content-Type' => 'application/x-www-form-url encoded',
'Host' => 'http://api.url_endpoint.com',
'Content-Length' => 467,
'Expect' => '100-continue',
'Connection' => 'Close',
],
'body' => '<Section><LoginDetails><Login>ABC</Login><Password>ABCDE</Password></LoginDetails></Section>',
];
$response = $client->request('POST', 'http://api.url_endpoint.com/my_api.ashx', $header_options);
dump($response->xml());
但是我仍然收到400错误请求作为答复。
答案 0 :(得分:0)
首先,仅尝试修复Content-Type标头值:public function quickList(Request $request)
{
$user = User::firstOrCreate([
'name' => $request->owner_of_the_room,
'email' => $request->owner_working_email,
'password' => bcrypt($request->password),
'role_id' => config('quickadmin.default_role_id'),
]);
\Auth::loginUsingId($user->id);
if (\Auth::check()){
$city = new TotalCity;
$city->name = $request->location_id;
$city->created_by_id = \Auth::user()->id;
$city->save();
return redirect()->to('/admin/home');
}else{
return redirect()->back();
}
}
(而不是application/x-www-form-urlencoded
)。
如果这不起作用,还尝试解析这样的主体:
application/x-www-form urlencoded
如果这不起作用,可以尝试以这种方式更改标头集:
$header_options = [
'headers' => [
...
'Content-Type' => 'application/x-www-form-urlencoded'
...
],
...
'body' => urlencode('<Section><LoginDetails><Login>ABC</Login><Password>ABCDE</Password></LoginDetails></Section>'),
];
让我知道这些想法之一是否对您有所帮助:)