Задать вопрос
@nonbody

Почему PHP не соединятся по ssl через fsockopen?

$f = get('https://twitter.com/', 'https://twitter.com/', $_SERVER['HTTP_USER_AGENT'], '', true);
var_dump($f);
function get($url, $ref, $ua, $cook, $ssl)
{
    $url = parse_url($url);
    $line="";
    $connecthost = $ssl ? 'ssl://' . $url['host'] : $url['host'];
    $port = $ssl ? 443  : 80;
    $fp=fsockopen($connecthost, $port, $errno, $errstr, 60);
    
        if(!$fp) {
        return $connecthost . ':    ' . $errstr;
        }
            else
            {
                $query = isset($url['query']) ? '?' . $url['query'] : '';
                $path = $url['path'] . $query;
                $headers = "GET $path HTTP/1.1\r\n";
                $headers .="Host: {$url['host']}\r\n";
                $headers .="User-Agent: $ua\r\n";
                $headers .= "Accept-Language: en,en-US;q=0.9,en;q=0.8\r\n";
                $headers .="Cookie: $cook\r\n";
                $headers .="Connection: Close\r\n";
                $headers .="Referer: $ref\r\n\r\n";
                
                fwrite($fp, $headers);
                
                
                    while(!feof($fp)){
                            
                        $line .= fgets($fp, 1024);
                    }
                
                
                fclose($fp);
            }

    return $line;
}

var_dump($f) ничего не возвращает. В error_log пусто.
  • Вопрос задан
  • 1525 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
rul22rus
@rul22rus
Frontend&Backend Web Developer
Возможно проблема в том, что отключен параметр allow_url_fopen в php.ini.
Еще может SSL модуль не включен, посмотрите в phpinfo()
Ответ написан
Arris
@Arris
Сапиенсы учатся, играя.
$fp=fsockopen($connecthost, $port, $errno, $errstr, 60);


php.net/manual/ru/function.fsockopen.php

errno
Если этот параметр предоставить, то в случае ошибки системного вызова функции connect() он будет принимать номер этой ошибки.
Если значение параметра errno равно 0, а функция вернула FALSE, значит ошибка произошла до вызова connect(). В большинстве случаев это свидетельствует о проблемах при инициализации сокета.

Читано? Осмыслено? Или пример тупо скопипащен со stackoverflow?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽