当前位置: 首页 > 工具软件 > PHP Soap > 使用案例 >

php 添加soapaction,php - 如何在PHP SoapClient中使用soapAction头 - SO中文参考 - www.soinside.com...

华烈
2023-12-01

我有一个PHP SoapClient PHP,我正在努力工作。 SoapClient验证并且可以获取WSDL,没问题。然后我需要使用WSDL作为端点启动soapAction,但是标头与我需要匹配的演示请求标头不匹配。

具体来说,我缺少soapAction标头,而是在内容类型中设置了一个动作参数。我该如何改变?

我想要生成的标题:

POST /hpq/hpq-service/hpq.wsdl HTTP/1.1

Accept-Encoding: gzip,deflate

Content-Type: text/xml;charset=UTF-8

SOAPAction: "HPQMemberValidationOperation"

Authorization: Basic EEV0Y2VsbHM898Q4c2dLSjg5aEdYenBLYmQ0akhr

Content-Length: 902

Host: ****

Connection: Keep-Alive

User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

我生成的标题:

POST /hpq/hpq-service/hpq.wsdl HTTP/1.1

Host: ***

Connection: Keep-Alive

User-Agent: PHPSoapClient

Content-Type: application/soap+xml; charset=utf-8; action="HPQMemberValidationOperation"

Content-Length: 688

Authorization: Basic EEV0Y2VsbHM898Q4c2dLSjg5aEdYenBLYmQ0akhr

我通过以下PHP代码调用此操作:

$opts = array(

'http'=>array(

'user_agent' => 'PHPSoapClient',

'header' => "Authorization: Basic " . base64_encode("$username:$password"),

),

'ssl' => array(

'ciphers'=>'RC4-SHA',

'verify_peer'=>false,

'verify_peer_name'=>false

),

);

ini_set( "soap.wsdl_cache_enabled", "0" );

$context = stream_context_create($opts);

$params = array(

'stream_context'=>$context,

'cache_wsdl' => WSDL_CACHE_NONE,

'encoding' => 'UTF-8',

'verifypeer' => false,

'verifyhost' => false,

'soap_version' => SOAP_1_2,

'trace' => 1,

'exceptions' => 1,

'connection_timeout' => 180,

);

$client = new SoapClient(WSDL_PATH, $params);

$response = $client->__soapCall('HPQMemberValidationOperation', array($payload), array('location'=>WSDL_PATH));

 类似资料: