запрос мыльного клиента https ошибка сервера, «Вы говорите простым HTTP на порт сервера с поддержкой SSL» - PullRequest
0 голосов
/ 19 марта 2020
Operating-system:centos6.
Php-version:5.3.
File-fromat:WSDL.
Finally i get this error.
>Your browser sent a request that this server could not understand.
>Reason: You're speaking plain HTTP to an SSL-enabled server port.
>Instead use the HTTPS scheme to access this URL, please.
Here are the package i catched.

POST /index.php/soap/wsdl HTTP / 1.1 Хост: 127.0.0.1:443 Подключение: пользовательский агент Keep-Alive: PHP -SOAP / 5.3.3 Тип содержимого: применение / мыло + XML; кодировка = UTF-8; action = "urn: serviceName # test_server # test" Content-Length: 338

HTTP / 1.1 400 Неправильная дата запроса: четверг, 19 марта 2020 г. 07:47:59 GMT Сервер: Apache X-Frame-Options: SAMEORIGIN Зависит от: Accept-Encoding Длина содержимого: 362 Соединение: закрыть Тип содержимого: text / html; charset = iso-8859-1

400 Плохой запрос

Плохой запрос

Ваш браузер отправил запрос, который этот сервер не может понять. Причина: вы говорите обычным HTTP с портом сервера с поддержкой SSL. Вместо этого используйте схему HTTPS для доступа к этому URL, пожалуйста.

Вот мой код.

    $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());
    }

1 Ответ

0 голосов
/ 20 марта 2020

Хорошо, когда я переписываю функцию с именем __doRequest в классе SoapClient. Я нахожу параметр $ location, например, "http://192.168.7.237: 443 / index.php / soap / wsdl " при печати. Очевидно, я получаю решение по этому вопросу.

Вот мой код.

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);
}
...