Guzzle POST returning GuzzleHttp\Exception\ClientException Client error: `POST
Guzzle POST returning GuzzleHttp\Exception\ClientException Client error: `POST
大家下午好;
几天来一直在尝试解决这个问题,和往常一样,这是在尝试从有类似错误的人那里寻找解决方案后的最后手段。
我正在尝试通过 xml post 到 API 并出现以下错误
GuzzleHttp\Exception\ClientException
Client error: `POST https://go.paytraq.com/api/shipper?APIToken=xxxxxxx&APIKey=xxxx` resulted in
a `400 Bad Request` response: <!DOCTYPE html> <html> <head> <title>PayTraq - Cloud-based
Business Suite - Manage your business online</ti (truncated...)
由于错误被截断,因此尝试找到获取完整错误的最佳方法,但没有成功。
请在下面找到我的代码..
$array = [
'ShipperName'=>[
'_value'=>$shipper_name
],
'ShipperVehicle'=>[
'_value'=>$shipper_vehicle
],
'ShipperDriver'=>[
'_value'=>$shipper_driver
],
'ShipperRegNumber'=>[
'_value'=>$shipper_reg
],
'IsDefault'=>[],
'IsInactive'=>[]
];
$xmlarray = ArrayToXml::convert($array,'Shipper');
try {
$client = new \GuzzleHttp\Client(['base_uri'=>'https://go.paytraq.com']);
$detail = $client->request(
'POST',
'/api/shipper',
['debug'=>'false',/*'debug'=>'false',this is debug line*/
'query'=>[
'APIToken'=>'xxx',
'APIKey'=>'xxxxxx'
],
'headers' => [
'Content-Type' => 'text/xml;',
],
['body' => $xmlarray]
]);
$response = $client->post($detail);
} catch (\GuzzleHttp\Exception\ClientErrorResponseException $e) {
var_dump($e->getResponse()->getBody()->getContents());
}
return redirect()->back();
下面是你用 echo $xmlarray
得到的结果
<?xml version="1.0"?>
<Shipper>
<ShipperName>
test
</ShipperName>
<ShipperVehicle>
test
</ShipperVehicle>
<ShipperDriver>
test
</ShipperDriver>
<ShipperRegNumber>
test
</ShipperRegNumber>
<IsDefault/>
<IsInactive/>
</Shipper>
Guzzle 调试如下
* Trying 52.16.7.7:443... * Connected to go.paytraq.com (52.16.7.7) port 443 (#0) * ALPN,
offering http/1.1 * successfully set certificate verify locations: * CAfile:
/usr/local/etc/openssl@1.1/cert.pem CApath: /usr/local/etc/openssl@1.1/certs * SSL connection
using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server did not agree to a protocol * Server
certificate: * subject: CN=go.paytraq.com * start date: Oct 14 00:00:00 2019 GMT * expire date:
Nov 14 12:00:00 2020 GMT * subjectAltName: host "go.paytraq.com" matched cert's "go.paytraq.com"
* issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon * SSL certificate verify ok. > POST
/api/shipper?APIToken=xxxx&APIKey=xxxxx HTTP/1.1 Host: go.paytraq.com Content-Length: 0 User-
Agent: GuzzleHttp/7 Content-Type: text/xml; * Mark bundle as not supporting multiuse < HTTP/1.1
400 Bad Request < Content-Type: text/html; charset=utf-8 < Date: Sun, 23 Aug 2020 14:26:09 GMT <
Request-Time: 3 < Server: nginx/1.4.6 (Ubuntu) < Content-Length: 3835 < Connection: keep-alive <
* Connection #0 to host go.paytraq.com left intact
从网站上看,这是必需的
The transmission of all API requests and responses needs to be made over HTTPS.
There are two type of requests: GET and POST. GET requests are usually used to read the data, POST request are used to add and update the data.
All POST requests should be made in XML format with "Content-Type: text/xml" header.
All success responses are also given in XML format.
400 Bad Request The request could not be understood by the server due to malformed syntax, invalid values or validation issues.
<Shipper>
<ShipperName></ShipperName>
<ShipperRegNumber></ShipperRegNumber>
<ShipperVehicle></ShipperVehicle>
<ShipperDriver></ShipperDriver>
<IsDefault></IsDefault>
<IsInactive></IsInactive>
</Shipper>
Only <ShipperName> is required.
先谢谢大家
萨基
终于成功了
这就是我必须做的修改才能让它工作。
将来可能会对某人有所帮助。
$client = new \GuzzleHttp\Client(['base_uri' =>'https://go.paytraq.com']);
$detail = $client->post(
'/api/shipper',
[/*'debug'=>'false',this is debug line*/
'headers' => [
'Content-Type' => 'text/xml',
],
'body' => $xmlarray,
'query'=>[
'APIToken'=>'3GUoyOxsCznhyiFQ',
'APIKey'=>'6421f7ad-418b-46b0-891b-e4385071a88f-7608'
],
]);
$response = $detail->getStatusCode();
大家下午好;
几天来一直在尝试解决这个问题,和往常一样,这是在尝试从有类似错误的人那里寻找解决方案后的最后手段。
我正在尝试通过 xml post 到 API 并出现以下错误
GuzzleHttp\Exception\ClientException
Client error: `POST https://go.paytraq.com/api/shipper?APIToken=xxxxxxx&APIKey=xxxx` resulted in
a `400 Bad Request` response: <!DOCTYPE html> <html> <head> <title>PayTraq - Cloud-based
Business Suite - Manage your business online</ti (truncated...)
由于错误被截断,因此尝试找到获取完整错误的最佳方法,但没有成功。
请在下面找到我的代码..
$array = [
'ShipperName'=>[
'_value'=>$shipper_name
],
'ShipperVehicle'=>[
'_value'=>$shipper_vehicle
],
'ShipperDriver'=>[
'_value'=>$shipper_driver
],
'ShipperRegNumber'=>[
'_value'=>$shipper_reg
],
'IsDefault'=>[],
'IsInactive'=>[]
];
$xmlarray = ArrayToXml::convert($array,'Shipper');
try {
$client = new \GuzzleHttp\Client(['base_uri'=>'https://go.paytraq.com']);
$detail = $client->request(
'POST',
'/api/shipper',
['debug'=>'false',/*'debug'=>'false',this is debug line*/
'query'=>[
'APIToken'=>'xxx',
'APIKey'=>'xxxxxx'
],
'headers' => [
'Content-Type' => 'text/xml;',
],
['body' => $xmlarray]
]);
$response = $client->post($detail);
} catch (\GuzzleHttp\Exception\ClientErrorResponseException $e) {
var_dump($e->getResponse()->getBody()->getContents());
}
return redirect()->back();
下面是你用 echo $xmlarray
得到的结果<?xml version="1.0"?>
<Shipper>
<ShipperName>
test
</ShipperName>
<ShipperVehicle>
test
</ShipperVehicle>
<ShipperDriver>
test
</ShipperDriver>
<ShipperRegNumber>
test
</ShipperRegNumber>
<IsDefault/>
<IsInactive/>
</Shipper>
Guzzle 调试如下
* Trying 52.16.7.7:443... * Connected to go.paytraq.com (52.16.7.7) port 443 (#0) * ALPN,
offering http/1.1 * successfully set certificate verify locations: * CAfile:
/usr/local/etc/openssl@1.1/cert.pem CApath: /usr/local/etc/openssl@1.1/certs * SSL connection
using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server did not agree to a protocol * Server
certificate: * subject: CN=go.paytraq.com * start date: Oct 14 00:00:00 2019 GMT * expire date:
Nov 14 12:00:00 2020 GMT * subjectAltName: host "go.paytraq.com" matched cert's "go.paytraq.com"
* issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon * SSL certificate verify ok. > POST
/api/shipper?APIToken=xxxx&APIKey=xxxxx HTTP/1.1 Host: go.paytraq.com Content-Length: 0 User-
Agent: GuzzleHttp/7 Content-Type: text/xml; * Mark bundle as not supporting multiuse < HTTP/1.1
400 Bad Request < Content-Type: text/html; charset=utf-8 < Date: Sun, 23 Aug 2020 14:26:09 GMT <
Request-Time: 3 < Server: nginx/1.4.6 (Ubuntu) < Content-Length: 3835 < Connection: keep-alive <
* Connection #0 to host go.paytraq.com left intact
从网站上看,这是必需的
The transmission of all API requests and responses needs to be made over HTTPS.
There are two type of requests: GET and POST. GET requests are usually used to read the data, POST request are used to add and update the data.
All POST requests should be made in XML format with "Content-Type: text/xml" header.
All success responses are also given in XML format.
400 Bad Request The request could not be understood by the server due to malformed syntax, invalid values or validation issues.
<Shipper>
<ShipperName></ShipperName>
<ShipperRegNumber></ShipperRegNumber>
<ShipperVehicle></ShipperVehicle>
<ShipperDriver></ShipperDriver>
<IsDefault></IsDefault>
<IsInactive></IsInactive>
</Shipper>
Only <ShipperName> is required.
先谢谢大家
萨基
终于成功了
这就是我必须做的修改才能让它工作。
将来可能会对某人有所帮助。
$client = new \GuzzleHttp\Client(['base_uri' =>'https://go.paytraq.com']);
$detail = $client->post(
'/api/shipper',
[/*'debug'=>'false',this is debug line*/
'headers' => [
'Content-Type' => 'text/xml',
],
'body' => $xmlarray,
'query'=>[
'APIToken'=>'3GUoyOxsCznhyiFQ',
'APIKey'=>'6421f7ad-418b-46b0-891b-e4385071a88f-7608'
],
]);
$response = $detail->getStatusCode();