如何提出正确的xml API请求?

时间:2020-09-07 12:55:12

标签: php xml api curl guzzle

我正在使用xml接口集成Rkiper。我遇到了一个问题,通过邮递员,我的请求悄悄地离开了,我得到了所需的答案,但是使用脚本却无法做到。

我编写了以下代码:

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
$client = new Client([ 'verify' => false]);
//
$uri = 'https://95.78.120.27:8096/rk7api/v0/xmlinterface.xml';
$xml = '<?xml version="1.0" encoding="windows-1251"?>
<RK7Query>
<RK7CMD CMD="GetRefList"/>
</RK7Query>';
$request = new Request(
  'POST', 
  $uri,
  ['Content-Type' => 'text/xml; charset=UTF8',
  'Authorization' => 'Basic xxx'],
  $xml
);
$response = $client->send($request);
echo $response->getBody();

在这种情况下,我只会得到一个空白的响应,一个白页。 您可能会认为有授权的内容(而不是密码xxx),但事实并非如此,因为否则它将显示401未经授权。对于我们来说,更改发送的xml就足够了,这样它就不会溢出,那么在响应中我们将已经收到

   [GuzzleHttp\Exception\ServerException] 
Server error: `POST https://95.78.120.27:8096/rk7api/v0/xmlinterface.xml` resulted in a `500 Unable to do action` response:
<?xml version="1.0" encoding="utf-8"?>
<messagesData>
    <type>SimpleXMLException</type>
    <mesg>&quot;RK7CMD&quot; expe (truncated...)
 (500)

您可能会认为问题出在与我通信的接口的xml一侧,但是没有,我通过邮递员得到了正确的答案。

邮递员生成了这样的curl请求,但是即使将其放入脚本中并运行它,也会出现白屏:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://95.78.120.27:8096/rk7api/v0/xmlinterface.xml",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS =>"\t<RK7Query>\n\t<RK7CMD CMD=\"GetRefList\"/>\n\t</RK7Query>'",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Basic SFRUUFVzZXI6eih5K040aUhhY3Uw",
    "Content-Type: application/xml"
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

通常来说,我在这个阶段已经坐了大约一个星期,不知道我的问题是什么。请帮我:)

0 个答案:

没有答案