Как использовать file_get_contents с прокси? - PullRequest
0 голосов
/ 24 августа 2018

Когда я использую file_get_contents с SSL и прокси, у меня появляются следующие ошибки:

Предупреждение: file_get_contents (): сбой операции SSL с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 1408F10B: SSLподпрограммы: ssl3_get_record: неправильный номер версии в D: \ XAMPP \ htdocs \ instahu \ app \ vendor \ classes \ instagram.php в строке 154

Предупреждение: file_get_contents (https://www.instagram.com/explore/tags/test/): не удалось открыть поток:Не удается подключиться к HTTPS-серверу через прокси в D: \ XAMPP \ htdocs \ instahu \ app \ vendor \ classes \ instagram.php в строке 154

protected function curl_send($url,$post = null,$headers = null) {

    global $settings;
    global $language;
    global $lng;
    global $currentUrl;

    $file = file_get_contents("http://" . $_SERVER['HTTP_HOST'] . "/app/vendor/classes/proxy.txt");

    $file = explode("", $file);
    if (count($file) == 0) {

        include_once __DIR__.'/../../templates/500.php';
        exit();
    }

    $mysqli = new mysqli($settings['db']['host'],
                     $settings['db']['user'],
                     $settings['db']['pass'],
                     $settings['db']['name']);
    $exe_proxies = $mysqli->query('SELECT * FROM `proxy_used`');
    $proxies = [];
    while ($row = $exe_proxies->fetch_assoc()) {
        $proxies[] = $row['proxy'];
    }
    foreach ($file as $proxy) {
        if (!in_array($proxy, $proxies)) {
            $target_proxy = $proxy;
            break;
        }
    }

    if (!isset($target_proxy)) {
        $mysqli->query('DELETE FROM `proxy_used`');
        $target_proxy = $file[0];
    }
    $mysqli->query('INSERT INTO `proxy_used` SET `proxy` = "' . $target_proxy . '"');
    $target_proxy = 'tcp://'.$target_proxy;
    $mysqli->close();
    $headers['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36';

    if ($headers) {
        foreach ($headers as $key => $header) {
            $result[] = $key . ":" . $header;
        }
        $headers = join("\r\n", $result);
    }

    $aContext = [
      'http' => [
        'proxy' => $proxy,
        'request_fulluri' => true,
        //'method' => $post ? 'POST' : 'GET',
        //'content' => http_build_query($post),
        'header' => $headers,
      ],
    ];

    $cxContext = stream_context_create($aContext);

    $server_output = file_get_contents($url, False, $cxContext);
    preg_match('#\d{3}#', $http_response_header[0], $code);

    //var_dump($server_output, $code[0], $aContext, $url); exit();

    return ['server_output' => $server_output, 'httpcode' => $code[0]];
}

1 Ответ

0 голосов
/ 24 августа 2018

Извините, ребята, я нашел решение в моем случае, все, что я меняю, это смена ключа 'http' на 'https' в массиве $ aContext, и это работает

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