Php SoapClient中使用哪个方法(POST/GET)发送HTTP请求?

Php SoapClient中使用哪个方法(POST/GET)发送HTTP请求?,php,soap,http-post,soap-client,Php,Soap,Http Post,Soap Client,我不知道我问的问题是否正确!但我认为它的答案将引导我解决我的问题 我正在尝试通过SoapClient调用函数,。。。这是我的代码的简化版本: class SOAP_AuthStruct { function __construct($user, $pass) { $this->Username = strval($user); $this->Password = strval($pass); } } $soap_loc = "SET

我不知道我问的问题是否正确!但我认为它的答案将引导我解决我的问题

我正在尝试通过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方法发送请求,但我在响应头中找不到它:“允许:获取、头、选项、跟踪”

请让我知道,如果你有任何解决我的问题!也是我问题的答案

非常感谢您的帮助和宝贵时间;)

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

更新:

好的,现在我知道它正在发送POST请求

我在代码中添加了这一行(调用函数后)

它返回:

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

我仍在努力,但我将感谢任何帮助或报酬

客户端HTTP POST调用的是目录而不是脚本吗?我的意思是说,可能/PATH_to_API是服务器上的一个目录,而您的脚本是该目录中的index.php。在这种情况下,您需要在POST命令后面附加一个斜杠,以便web服务器返回默认文档。
当您收到405错误时,服务器日志会说什么?此外,您可以将参数作为GET而不是POST发送。

响应标头声明不允许使用该方法,您需要将数据作为GET请求发送。请参阅:
Allow:GET,HEAD,OPTIONS,TRACE
@RobertPitt:谢谢Robert,现在我确定了!你知道我如何改变SoapClient方法来获取吗?!感谢您的回复,我编辑了路径到API,以类似的格式,我必须调用。。。我调用的主要路径是:something.com/RimWebAPI/?api\u key=APIKEY&sig=SIGNATURE(它似乎分为主机和路径),我没有访问服务器的权限。。。不幸的是。。。
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