Php soapclient请求https服务器错误&x27;你';对于启用SSL的服务器端口';
POST/index.php/soap/wsdl HTTP/1.1 主持人:127.0.0.1:443 连接:保持活力 用户代理:PHP-SOAP/5.3.3 内容类型:应用程序/soap+xml;字符集=utf-8;action=“urn:serviceName#测试#服务器#测试” 内容长度:338 HTTP/1.1400错误请求 日期:2020年3月19日星期四格林尼治标准时间07:47:59 服务器:Apache X-Frame-Options:SAMEORIGIN 改变:接受编码 内容长度:362 连接:关闭 内容类型:text/html;字符集=iso-8859-1 400错误请求 错误的请求 您的浏览器发送了此服务器无法理解的请求。Php soapclient请求https服务器错误&x27;你';对于启用SSL的服务器端口';,php,soap,soap-client,Php,Soap,Soap Client,POST/index.php/soap/wsdl HTTP/1.1 主持人:127.0.0.1:443 连接:保持活力 用户代理:PHP-SOAP/5.3.3 内容类型:应用程序/soap+xml;字符集=utf-8;action=“urn:serviceName#测试#服务器#测试” 内容长度:338 HTTP/1.1400错误请求 日期:2020年3月19日星期四格林尼治标准时间07:47:59 服务器:Apache X-Frame-Options:SAMEORIGIN 改变:接受编码
原因:您正在对启用SSL的服务器端口使用普通HTTP。
请改用HTTPS方案访问此URL。
这是我的密码
_uudorequest函数中的参数$location更改为“http://:443/” 重写代码
$url = "https://127.0.0.1/soap/wsdl?wsdl";
$context = stream_context_create(array(
'ssl' => array(
// set some SSL/TLS specific options
'verify_peer' => false,
// 'verify_peer_name' => false,
'allow_self_signed' => true,
'SNI_enabled' => false
),
'https' => array(
'curl_verify_ssl_peer' => false,
'curl_verify_ssl_host' => false
)
));
$client = new SoapClient($url,array('stream_context' => $context,'trace' => 1,'exceptions' => true, 'soap_version'=>SOAP_1_2));
try{
$response = $client->__soapCall("test",array());
echo $response;
}catch (SoapFault $f){
var_dump($f->getMessage());
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
}
错误似乎相当明显。您需要使用
https://
而不是http://
发送请求,您的问题是什么?描述你正在解决的情况以及你需要帮助的领域。更好的问题得到更好的答案。@ADyson很抱歉以前没有发布我的代码。但是请求的url是“HTTPS”。好的,但是端点是否确实有一个与之关联的SSL证书?从您的更新中,我可以看到URL是127.0.0.1
,它是本地机器。通常,不会为本地请求启用SSL证书。您必须采取额外的步骤来安装一个本地自签名证书,然后让您的代码信任它。也许您应该使用HTTP进行本地测试。@ADyson是的,使用HTTP协议时工作正常。但是我们的环境需要“https”,所以我正在尝试解决这个问题。最后我来这里寻求帮助
$url = "https://127.0.0.1/soap/wsdl?wsdl";
$context = stream_context_create(array(
'ssl' => array(
// set some SSL/TLS specific options
'verify_peer' => false,
// 'verify_peer_name' => false,
'allow_self_signed' => true,
'SNI_enabled' => false
),
'https' => array(
'curl_verify_ssl_peer' => false,
'curl_verify_ssl_host' => false
)
));
$client = new SoapClient($url,array('stream_context' => $context,'trace' => 1,'exceptions' => true, 'soap_version'=>SOAP_1_2));
try{
$response = $client->__soapCall("test",array());
echo $response;
}catch (SoapFault $f){
var_dump($f->getMessage());
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
}
public function __construct ($wsdl, $options=null)
{
parent::__construct($wsdl, $options);
}
public function __doRequest ($request, $location, $action, $version, $one_way = 0)
{
$url_parts = parse_url ($location);
if($url_parts["scheme"]=="http"&&$url_parts['port']=="443")
{
$location = substr_replace($location,"https",0,4);
}
return parent::__doRequest($request, $location, $action, $version, $one_way);
}