Какой метод (POST / GET) используется в SoapClient для отправки HTTP-запросов? - PullRequest
2 голосов
/ 13 апреля 2011

Не знаю, правильно ли я задаю вопрос! Но я думаю, что его ответ поможет мне решить мою проблему ...

Я пытаюсь вызвать функцию с помощью SoapClient, ... Это упрощенная версия моего кода:

class SOAP_AuthStruct {
    function __construct($user, $pass) {
        $this->Username = strval($user);
        $this->Password = strval($pass);
    }
}


$soap_loc = "SET TO SOAP PATH";

$soap_opts = array (
        'location'   =>  $soap_loc,
        'style'      =>  SOAP_DOCUMENT,
        'use'        =>  SOAP_LITERAL,
        'cache_wsdl' =>  WSDL_CACHE_NONE,
        'exceptions' =>  FALSE,
        'trace'      =>  TRUE
);


$testclient = new SoapClient("soapcall.wsdl", $soap_opts);

$soap_auth = new SOAP_AuthStruct("USERNAME", "PASSWORD");
$soap_header = new SoapHeader($soap_ns,'AuthHeader',$soap_auth,FALSE);

// $a_param is filled with essential values
$soap_param = array("CreateTransaction" => $a_param);


try {
    $result = $testclient->__soapCall("CreateTransaction", $soap_param, NULL, $soap_header, $output_headers);

    echo $testclient->__getLastRequest();
    echo "\n\n";
    echo $testclient->__getLastResponse(); 
    echo "\n\n";
    echo $testclient->__getLastResponseHeaders(); 
    echo "\n\n";

} catch (SoapFault $fault) {

    trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);

}

У меня есть образец правильного формата запроса, и функция getLastRequest () показывает, что запрос имеет правильный формат ...

но в ответ у меня появляется это сообщение об ошибке:

HTTP/1.1 405 Method Not Allowed
X-Mashery-Responder: XXXXX.mashery.com
Allow: GET, HEAD, OPTIONS, TRACE
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 12 Apr 2011 18:34:29 GMT
Accept-Ranges: bytes
Content-Length: 1293

Я думаю (и я не уверен в этом!), Что SoapClient может использовать метод POST для отправки запроса, и я не могу найти его в заголовке ответа: «Разрешить: GET, HEAD, OPTIONS, TRACE»

Пожалуйста, дайте мне знать, если у вас есть решение моей проблемы! А также ответ на мой вопрос!

Большое спасибо заранее за вашу помощь и ваше время;)

--------------------------------------------

UPDATE:

ОК, теперь я знаю, что он отправляет POST-запрос!

Я добавил эту строку в свой код (после вызова функции)

echo $testclient->__getLastRequestHeaders();

и он вернулся:

POST /RimWebAPI/?api_key=APIKEY&sig=SIGNATURE   HTTP/1.1
Host: something.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.1.6
Content-Type: text/xml; charset=utf-8
SOAPAction: "SOAP ACTION"
Content-Length: 2344

Я все еще работаю над этим, но я был бы признателен за любую помощь или помощь!

1 Ответ

1 голос
/ 13 апреля 2011

Клиент HTTP POST вызывает каталог, а не сценарий? Я хочу сказать, что вполне возможно, что / PATH_TO_API является каталогом на сервере, и ваш сценарий был index.php в этом каталоге. В этом случае вам потребуется добавить косую черту в команду POST, чтобы веб-сервер возвратил документ по умолчанию. Что говорят журналы сервера, когда вы получаете ошибку 405? Кроме того, вы можете отправить параметр как GET вместо POST.

...