【问题标题】:How to change SOAPAction HTTP header for \SoapClient?如何更改 \SoapClient 的 SOAPAction HTTP 标头?
【发布时间】:2015-12-07 16:24:34
【问题描述】:

我有一个相当挑剔的 SoapApi,我想与之交谈。

我需要更改随 HTTP 请求发送的 SoapAction 标头。

我说的不是作为 XML 消息的一部分与 Soap Envelop 一起传递的 \SoapHeader,而是 HTTP 标头 SOAPAction

使用 curl 我会像这样发送请求:

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction: http://tempuri.org/my-custom-action" --data @message.xml http://some-soap-endpoint.asmx --proxy le-proxy:3218

似乎只能在 SoapClient 创建期间设置 SoapAction

【问题讨论】:

    标签: php http soap http-headers


    【解决方案1】:

    我停止使用\SoapClient,而对于这个特殊的“Soap”API (for a different reason as well),我使用 Guzzle 代替简单地模仿 curl 请求。

    在那里,我用原始 XML 向 API 发起了一个简单的发布请求,现在它正在工作;尽管我认为无法使用专用的\SoapService 是一个缺点。

    如果有人想知道如何通过 guzzle 发送 XML 请求,可以这样做:

    $options = [
        'body'    => $body,
        'headers' => [
            "Content-Type" => "text/xml; charset=utf-8",
            'SOAPAction'   => 'tempuri.org/my-custom-action',
    
        ],
        'proxy'   => 'tcp://le-proxy:3128',
    ];
    $client = new Client();
    $soapRequest = $client->createRequest(
        'post',
        "http://some-soap-endpoint.asmx",
        $options
    );
    
    try {
        $response = $client->send($soapRequest);
    } catch (RequestException $e) {
        /**
         * error handling
         */
    }
    

    我认为这是一种解决方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多