Php soapclient请求https服务器错误&x27;你';对于启用SSL的服务器端口';

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 改变:接受编码

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错误请求 错误的请求 您的浏览器发送了此服务器无法理解的请求。
原因:您正在对启用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);
}