Я могу создать необработанный XML и обмениваться данными с сервером, используя curl с CURLOPT_FOLLOWLOCATION, установленной в true. По словам поставщика услуг 307 перенаправления являются правилом, и хосты могут меняться в любое время.
XML для этого проекта является массивным и многословным. Я не хочу работать с необработанным XML; Я хочу использовать SOAPClient.
Этот код SOAPClient приводит к SoapFault "message": protected] => string (25) "Не удалось подключиться к хосту"
$url = "https://vmi21.example.net/VMIService.asmx";
$options = [ 'trace' => 1 ];
$soapClient = new SOAPClient($url . '?wsdl', $options );
try
{
$result = $soapClient->GetCompanyList( $params );
}
catch (SoapFault $soapFault)
{
var_dump($soapFault);
}
После большой отладки я заметил URL в трассировке:
...
[1]=> string(41) "https://vmi8.example.net/VMIService.asmx"
...
Предполагая, что именно здесь 307 перенаправил локон, я установил следующее в параметрах SOAPClient, и это сработало!
[ 'location' => 'https://vmi8.example.net/VMIService.asmx' ]
Как упомянуто выше, по словам поставщика услуг, эти хосты могут измениться в любое время, что означает, что этот код, вероятно, часто ломается.
Есть ли какой-нибудь способ указать SOAPClient следовать этим перенаправлениям, как делает curl, если для параметра CURLOPT_FOLLOWLOCATION установлено значение true?