Не уходит 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>"RK7CMD" 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 шт):
В этом случае я получаю просто пустой ответ, белую страницу.
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());
