запрос soapclient от php к c # веб-сервису с аутентификацией - PullRequest
1 голос
/ 09 февраля 2011

Я хочу выполнить удаленную функцию с помощью php soap. Веб-сервис создается с использованием c # .net. Для вызова удаленной функции должна быть аутентификация. Я всегда получаю несанкционированную ошибку всякий раз, когда пытаюсь вызвать удаленную функцию. Однако , когда я получаю содержимое веб-службы с помощью wget, как это

wget -c --user=my_username --password=my_password http://path/to/wsdl

и я получил этот вывод:

    --2011-02-09 09:55:10--  http://path/to/wsdl
Connecting to my_ip:80... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Reusing existing connection to my_ip:80.
HTTP request sent, awaiting response... 401 Unauthorized
Reusing existing connection to my_ip:80.
HTTP request sent, awaiting response... 200 OK
Length: 3300 (3.2K) [text/html]
Saving to: `my_webservice.asmx'

100%[====================================================================================================================================================================================================>] 3,300       --.-K/s   in 0.001s  

2011-02-09 09:55:11 (3.81 MB/s) - `my_webservice.asmx' saved [3300/3300]

Когда я использую мыло для вызова удаленной функции следующим образом:

$connSoap = new SoapClient($WebServiceUrl, array('login' => $username, 
                                                 'password' => $password));
$requestOutput = $connSoap->GetVal (1, 1, 1);

Я получил эту ошибку:

SoapClient::SoapClient(http://path/to/wsdl): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized

Есть комментарии?

Заранее спасибо

1 Ответ

0 голосов
/ 23 апреля 2012

Я нашел альтернативный способ решить эту проблему

Я подготовил и конвертировал xml и отправлял запрос, используя curl с конвертом в качестве параметра. Вы можете ссылаться на следующий код:

$username = "";
$password = "";
$webServiceUrl = "";

$xml = '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <RemoteMethod xmlns="http://your.service.url/">
      <parameter_1>your_paramter_1</parameter_1>
      <parameter_2>your_paramter_2</parameter_2>
      ........
      <parameter_n>your_parameter_n</parameter_n>
    </RemoteMethod>
  </soap:Body>
</soap:Envelope>';


$ch = fopen("envelope.xml", "w");
fwrite($ch, $xml);

$cmd = 'curl -d @envelope.xml -H "Content-Type: text/xml;charset=UTF-8 " --user ' . $username . ':'.$password.' --ntlm ' . $webServiceUrl . ' > requestResult.xml';
shell_exec($cmd);
fclose($ch);
...