SoapClient::__setSoapHeaders

(PHP 5 >= 5.0.5, PHP 7, PHP 8)

SoapClient::__setSoapHeaders设置后续调用的 SOAP 标头

描述

public SoapClient::__setSoapHeaders(SoapHeader|array|null $headers = null): bool

定义要与 SOAP 请求一起发送的标头。

注意:

调用此方法将替换任何先前值。

参数

headers

要设置的标头。它可以是 SoapHeader 对象或 SoapHeader 对象数组。如果未指定或设置为 null,则将删除标头。

返回值

成功时返回 true,失败时返回 false

示例

示例 #1 SoapClient::__setSoapHeaders() 示例

<?php

$client
= new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$header = new SoapHeader('http://soapinterop.org/echoheader/',
'echoMeStringRequest',
'hello world');

$client->__setSoapHeaders($header);

$client->__soapCall("echoVoid", null);
?>

示例 #2 设置多个标头

<?php

$client
= new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$headers = array();

$headers[] = new SoapHeader('http://soapinterop.org/echoheader/',
'echoMeStringRequest',
'hello world');

$headers[] = new SoapHeader('http://soapinterop.org/echoheader/',
'echoMeStringRequest',
'hello world again');

$client->__setSoapHeaders($headers);

$client->__soapCall("echoVoid", null);
?>

添加注释

用户贡献的注释 4 条注释

kedar dot purohit @ mavs dot uta dot edu
14 年前
要创建复杂的 SOAP 标头,您可以执行以下操作

所需的 SOAP 标头

<soap:Header>
<RequestorCredentials xmlns="http://namespace.example.com/">
<Token>string</Token>
<Version>string</Version>
<MerchantID>string</MerchantID>
<UserCredentials>
<UserID>string</UserID>
<Password>string</Password>
</UserCredentials>
</RequestorCredentials>
</soap:Header>

相应的 PHP 代码

<?php

$ns
= 'http://namespace.example.com/'; //WS 的命名空间。

//SOAP 标头的正文。
$headerbody = array('Token' => $someToken,
'Version' => $someVersion,
'MerchantID'=>$someMerchantId,
'UserCredentials'=>array('UserID'=>$UserID,
'Password'=>$Pwd));

//创建 SOAP 标头。
$header = new SOAPHeader($ns, 'RequestorCredentials', $headerbody);

//设置 SOAP 客户端的标头。
$soap_client->__setSoapHeaders($header);

?>
peamik1953 at NOSPAM dot btinternet dot com
14 年前
您无法添加额外的标头。如果您想要两个标头,并且其中一个已经存在,请首先使用 $client->__setSoapHeaders(NULL) 删除它。然后发出 $client->__setSoapHeaders($headers),其中 $headers 是 soapHeader() 对象数组。
jayrajput at gmail dot com
15 年前
对于多个 SOAP 标头,在使用 SoapVar 创建 SoapHeader 时,PHP 代码只是终止(命令终止)。我不确定这是否是错误。

没有 SOAPVar,代码对我来说运行良好。

创建 SoapHeader 有不同的方法,我使用了 SoapVar,代码没有运行。我仍然是 SOAP 的新手。

尝试使用普通字符串,它运行良好。SoapHeader 可以接受 SoapVar 或字符串作为第三个参数。

我的代码

<?php
// 第一个 SOAP 头信息。
$var = new SoapVar($header, XSD_ANYXML);
$soapHeader = new SoapHeader(NAME_SPACE, "Security", $var);
// 第二个 SOAP 头信息。
$var2 = new SoapVar($header2, XSD_ANYXML);
$soapHeader2 = new SoapHeader(DIFF_NAME_SPACE, "ID", $var2);

$client = new SoapClient($wsdl, array("location" => $location));

$headers = array();
$headers[] = $soapHeader;
$headers[] = $soapHeader2;

// 这里我的代码就结束了。
$client->__setSoapHeaders($headers);
?>
mlconnor at yahoo dot com
13 年前
有人知道如何获取响应头信息吗? getLastResponseHeader 返回的是字符串响应,而不是我期望的复杂对象...
To Top