php - 访问soap web服务生产环境的问题
问题描述
我希望这个问题不会被标记为重复,因为我在网站上阅读了许多相关的问题和答案:尽管我尝试了大部分建议,但仍然无法解决我的问题。
我的代码库:(根据我的浏览,我故意留下评论以了解我迄今为止一直在尝试的内容)
try {
$opts = array(
//~mrossw 'http' => array(
//~mrossw 'user_agent' => 'PHPSoapClient'
//~mrossw ),
//~mrossw 'socket' => array('bindto' => '158.69.189.149')
'socket' => array('bindto' => '127.0.0.1')
//~mrossw ,
//~mrossw 'ssl' => [
//~mrossw 'verify_peer' => true,
//~mrossw 'verify_peer_name' => true,
//~mrossw 'allow_self_signed' => true
//~mrossw ]
);
$context = stream_context_create($opts);
$client = new SoapClient("https://ws_provider_hostname:xxxx/foo/bar/blah/Operaciones/OpFooBarBlahReqABCS?wsdl",
//~mrossw $client = new SoapClient($doc_root.'OpCotizadorVehiculoExtReqABCS.xml',
array(
'location' => "https://ws_provider_hostname:xxxx/foo/bar/blah/Operaciones/OpFooBarBlahReqABCS?wsdl",
'uri' => "https://ws_provider_hostname:xxxx/foo/bar/blah/Operaciones",
// Stuff for development.
'trace' => 1,
'exceptions' => true,
'keep_alive' => true,
'connection_timeout' => 120,
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
//~mrossw 'local_cert' => $certRequest_param['sslcertfile'],
//~mrossw 'login'=>'username',
//~mrossw 'password' => 'password'
)
);
} catch (Exception $e) {
echo \"<h2>Exception Error!</h2>\";
echo $e->getMessage();
// print_r($e);
}
WS 提供者在端口 xxxx 上有一个开发环境,在端口 yyyy 上有一个 prod 环境。主机名和路径请求相同。
SoapClient 实例化和操作调用在开发环境中完美运行。
当我将端口更改为针对 prod env 获取时,出现以下错误:
SOAP 错误:解析 WSDL:无法从“https://ws_provider_hostname:xxxx/foo/bar/blah/Operaciones/OpFooBarBlahReqABCS?wsdl”加载:无法加载外部实体“https://ws_provider_hostname:xxxx/foo/ bar/blah/Operaciones/OpFooBarBlahReqABCS?wsdl"
提供商说我的公共 Web 服务器的 IP 已正确设置为防火墙允许的 IP。它看起来是正确的,因为当我尝试从具有不同 IP 的不同服务器运行代码时,它在 dev 和 prod env 中都失败并出现相同的错误。
当我从专用网络内的服务器运行该代码时,它可以在两种环境中运行!我对安全性知之甚少,但这对我来说听起来像是安全漏洞。我在这里提到它,以防它可以提供线索。我猜这是因为这台服务器有一个私有 ip,而提供商的防火墙没有过滤它。
当我在我的 PC 浏览器中转到 https://ws_provider_hostname:xxxx/foo/bar/blah/Operaciones/OpFooBarBlahReqABCS?wsdl 时,我得到了正确的 wsdl 的 xml。
你知道什么可以阻止代码从我的公共网络服务器上工作吗?
或者我还能检查什么?
例如,我找不到从浏览器外部检查 ws 服务器的 http 响应代码的方法。我既不能得到一个curl请求表单bash来返回 wsdl xml,但这也许应该是另一个问题。
也让我知道我是否可以提供任何其他相关的测试或数据。
解决方案
推荐阅读
- reactjs - Reactjs 中渲染 jsxVarible 和 jsxComponet 的区别
- kubernetes - PVC 创建时没有访问模式和存储类
- sql-server - .NET v2 IIS 30 秒后超时(并非总是如此)
- pandas - 如何分组并创建字符串列表
- rest - 使用自然键休息:对 HTTP PUT 的 201 Created 响应能否包含与请求 URI 不同的 Location 标头?
- amazon-web-services - 通过电子邮件将报告自动发送到 S3 存储桶
- r - 我如何使用 YYYYMM 格式遍历 R 中的表
- javascript - 我可以在不触发详尽的 deps lint 的情况下使用包含 ref 的 React 钩子吗?
- python - 替换从某个位置开始的字符串的一部分
- wordpress - 按价格过滤,更改按钮标签