Не уходит POST запрос

Всем привет! Занимаюсь интеграцией Ркипер с помощью xml интерфейса. Столкнулся с такой проблемой, что через postman у меня запрос спокойно уходит и я получаю нужный мне ответ, но с помощью скрипта не получается это сделать.

Написал вот такой код:

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();

В этом случае я получаю просто пустой ответ, белую страницу. Можно подумать, что что-то с авторизацией(вместо пароля ххх поставил), но нет, это не так, ведь иначе выведет 401 unauthorize. Достаточно нам изменить отправляемый 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 интерфейса с которым я общаюсь, но нет, через postman я получаю корректный ответ. введите сюда описание изображения

Postman генерировал такой 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;

В общем уже около недели сижу на этом этапе и не понимаю в чем у меня проблема. Помогите мне пожалуйста :)


Ответы (1 шт):

Автор решения: Meow

В этом случае я получаю просто пустой ответ, белую страницу.

XML-содержимое ответа не отобразится браузере т.к. он будет думать, что ему скормили HTML-документ и даже попытается его отрендерить.
Подробнее https://ru.stackoverflow.com/a/498657/405022

Вам нужно открыть исходный код страницы, чтобы увидеть XML. Для этого нажмите на правую кнопку мыши >>> Просмотр кода страницы или Ctrl + U.

введите сюда описание изображения

Также я немного доработал ваше решение, тестируйте (желательно из консоли).

use GuzzleHttp\{Client, RequestOptions};

$xmlData = <<<EOT
<RK7Query>
    <RK7CMD CMD="GetRefList"/>
</RK7Query>
EOT;

$client = new Client([RequestOptions::VERIFY => false]);

$response = $client->post(
    'https://95.78.120.27:8096/rk7api/v0/xmlinterface.xml',
    [
        RequestOptions::HEADERS => [
            'Authorization' => 'Basic psw123'
        ],
        RequestOptions::BODY => $xmlData
    ]
);

var_dump($response->getBody()->getContents());
→ Ссылка