Ошибка сокета на HTTPS, но не на HTTP |PHP - PullRequest
0 голосов
/ 24 октября 2018

У меня есть фоновый скрипт, работающий через сокет, как показано ниже

   if (strstr($_SERVER['PHP_SELF'], "/")) { 
        $location = array(); 
        $location = explode("/", $_SERVER['PHP_SELF']); 
        $folder = $location[count($location) - 2]; 
    } 
    else { 
        $folder = $_SERVER['PHP_SELF']; 
    }

    //script, runs in background
    $host = HOST;
    $remote_house = 'https://'.$host.'/'.$folder.'/controllers/background';

    $socketcon = fsockopen($host, 80);

    if($socketcon) {   
        $socketdata = "GET $remote_house/".$scriptName." HTTPS 1.1\r\nHost: $host\r\nConnection: Close\r\n\r\n"; 
        fwrite($socketcon, $socketdata); 
        fclose($socketcon);
    }

Это работает правильно на локальном хосте и в сети с HTTP, но не работает на HTTPS с этой ошибкой.

HTTP/1.0 400 неверный запрос Cache-Control: no-cache Соединение: закрыть Content-Type: text / html 400 Bad request Ваш браузер отправил неверный запрос.

Есть идеи?

1 Ответ

0 голосов
/ 24 октября 2018
$socketdata = "GET $remote_house/".$scriptName." HTTPS 1.1\r\n...

Это неверный HTTP и неверный HTTPS-запрос.Во-первых, это должно быть HTTP/1.1, а не HTTPS 1.1.А для HTTPS вам нужно сначала создать соединение SSL / TLS с одноранговым узлом, а затем вы можете отправить HTTP-запрос по этому соединению.

$remote_house = 'https://'.$host.'/'.$folder.'/controllers/background';

Более того, компонент пути в запросе не должен содержать полныйURL, но только путь, то есть '/'.$folder.'/controllers/background'.

$socketcon = fsockopen($host, 80);

А для HTTPS вам необходимо подключиться к порту 443, а не 80, а затем выполнить рукопожатие SSL / TLS перед отправкой HTTP-запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...