You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP SoapClient如何为所有请求添加X-Api-Key等自定义HTTP头

问题描述

我在使用SoapClient时,尝试在stream_context中添加自定义头(X-Api-Key),代码如下:

$stream = array('stream_context' => stream_context_create(array(
            'http' => array(
                'header' => 'Content-Type: application/soap+xml; charset=utf-8; X-Api-Key: XXXXX'
            ),
        )));

$soapOptions = array(
        'trace'         => 1,
        'exceptions'    => 1,
        'login'         => $this->AUTH_BASIC_USER,
        'password'      => $this->AUTH_BASIC_PASS,
        'soap_version'  => SOAP_1_2,
        'use'           => SOAP_LITERAL,
    );

$client = new \SoapClient($this->SOAP_URL . 'customer?wsdl=single', $soapOptions + $stream);

上述配置运行正常,可正常获取可用方法,说明客户端实例可正常加载WSDL。但调用任意方法时,X-Api-Key头丢失,返回401错误。

查看实际发起的请求头可以发现X-Api-Key确实缺失:

POST /ws/soap/v1/customer HTTP/1.1\r\n
Host: api-test.XXX.com\r\n
Connection: Keep-Alive\r\n
User-Agent: PHP-SOAP/8.0.3\r\n
Content-Type: application/soap+xml; charset=utf-8; action="create"\r\n
Content-Length: 605\r\n
Authorization: Basic XXX=\r\n

请问如何为该客户端实例的所有请求添加自定义HTTP头?


原因说明

你将X-Api-Key参数拼接在了Content-Type的同一行定义中,PHP SoapClient处理实际SOAP调用时,会自动重写Content-Type头补充action参数,导致整行原Content-Type配置被覆盖,拼接在后面的X-Api-Key也随之丢失。

解决方案

将stream_context中的header配置改为数组格式,每个请求头单独定义,即可避免被覆盖:

$stream = array('stream_context' => stream_context_create(array(
    'http' => array(
        'header' => array(
            'Content-Type: application/soap+xml; charset=utf-8',
            'X-Api-Key: XXXXX'
        )
    ),
)));

// 原有soapOptions配置无需修改
$soapOptions = array(
        'trace'         => 1,
        'exceptions'    => 1,
        'login'         => $this->AUTH_BASIC_USER,
        'password'      => $this->AUTH_BASIC_PASS,
        'soap_version'  => SOAP_1_2,
        'use'           => SOAP_LITERAL,
);

$client = new \SoapClient($this->SOAP_URL . 'customer?wsdl=single', $soapOptions + $stream);

修改后所有该实例发起的请求都会自动携带X-Api-Key头,你可以通过$client->__getLastRequestHeaders()方法验证请求头是否符合预期。


内容的提问来源于stack exchange,提问作者elniño

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:18:03