gpt4 book ai didi

PHP SoapClient 请求作为客户端 IP 而不是服务器 IP 接收

转载 作者:可可西里 更新时间:2023-11-01 13:47:40 25 4
gpt4 key购买 nike

我正在尝试在另一个域上运行 SOAP 方法,该方法必须从列入白名单的 IP 地址接收,但 WSDL 似乎以某种方式认为请求来自客户端而不是服务器。该调用从表单收集信息,使用 AJAX 发送到 PHP 函数,该函数将字段格式化为 API 友好格式,然后通过 PHP SoapClient 发送。

我认为最好的方法是调查与 SoapClient 一起发送的 header ,但 header 没有列出任何 IP 地址(主机、连接、用户代理、内容类型、SOAPAction 和内容-长度)。

首先,我阅读了 SOAP 端点的文档。它显然没有指定要传递的任何特定参数,这无论如何都没有意义,因为我只能伪造一个 IP 地址。然后,我阅读了 PHP SoapClient 的文档.有趣的是,我找不到设置 IP 地址的确切位置,但我确实找到了一条提到使用 'stream_context' 的评论,但也没有成功。

我还记录了每个请求,包括 $_SERVER['SERVER_ADDR']$_SERVER['REMOTE_ADDR'],它们都按预期报告 IP 地址;他们的技术支持人员告诉我他们正在接收来自 'REMOTE_ADDR' 值的请求。

我尝试发送一个简单的请求并预期会收到除 IP 地址之外的其他错误,但我一直遇到 IP 地址问题。

有什么方法可以让我更加确定我正在使用正确的(服务器)IP 发送 SOAP 请求?

最佳答案

好吧,我想通了 - 至少对于我自己的情况而言。您阅读的 PHP 手册中的评论是正确的(假设我们谈论的是同一个),但是,我还需要在我的 IP 地址中包含端口。所以我最终使用的代码是:

$options = array('socket' => array('bindto' => 'xxx.xxx.xx.xxx:0'));
$context = stream_context_create($options);
$client = new SoapClient($url,
array('trace' => 1, 'exception' => 0, 'stream_context' => $context));

看,之前我没有包含“:0”,我只包含了 IP 地址。所以不要忘记这一点!

关于PHP SoapClient 请求作为客户端 IP 而不是服务器 IP 接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com