Ошибка прокси PHP OOP CURL - PullRequest
       14

Ошибка прокси PHP OOP CURL

3 голосов
/ 25 февраля 2011
<?php
class Isis_Expl
{
    const USERAGENT = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13';

    public static $ch;

    public static $proxyType;
    public static $proxy;
    public static $postFields;
    public static $cookie;

    public static function setProxy($proxy, $proxyType = '1')
    {
        self::$proxy = $proxy;
        switch ($proxyType)
        {
            case '4':
                self::$proxyType = 'CURLPROXY_SOCKS4';
                break;
            case '5':
                self::$proxyType = 'CURLPROXY_SOCKS5';
                break;
            default:
                break;
        }
    }

    public static function init($url)
    {
        self::$ch = curl_init();
        curl_setopt(self::$ch, CURLOPT_URL, $url); 
        curl_setopt(self::$ch, CURLOPT_REFERER, $url);        
        curl_setopt(self::$ch, CURLOPT_HEADER, 1);
        curl_setopt(self::$ch, CURLOPT_USERAGENT, self::USERAGENT);
        curl_setopt(self::$ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt(self::$ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt(self::$ch, CURLOPT_TIMEOUT, 15);
        curl_setopt(self::$ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt(self::$ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        self::_getProxy();
        self::_getPost();
        self::_getCookie();

        $content = curl_exec(self::$ch); 

        if (curl_errno(self::$ch))
        {
            echo curl_error(self::$ch);
            return false;
        }
        else
        {
            return $content;
        }
    }

    protected function _getProxy()
    {
        if (self::$proxyType) curl_setopt(self::$ch, CURLOPT_PROXYTYPE, self::$proxyType);        
        if (self::$proxy) curl_setopt(self::$ch, CURLOPT_PROXY, self::$proxy);
    }

    protected function _getPost()
    {
        if (self::$postFields)
        {
            curl_setopt(self::$ch, CURLOPT_POST, 1);
            curl_setopt(self::$ch, CURLOPT_POSTFIELDS, self::$postFields);
        }
    }

    protected function _getCookie()
    {
        if (self::$cookie) curl_setopt(self::$ch, CURLOPT_COOKIE, self::$cookie);
    }   
}

Isis_Expl::setProxy('XXX.XXX.XXX.XXX:XXXX');
echo Isis_Expl::init('http://google.com');

Вывод: Ошибка записи: соединение было сброшено

Но если я прокомментирую "//Isis_Expl::setProxy('XXX.XXX.XXX.XXX:XXXX ');»что вывод в порядке .. Где проблема?

1 Ответ

2 голосов
/ 25 февраля 2011

Прежде всего, не используйте статический класс, когда экземпляр будет более подходящим.У вас есть состояние здесь, так что используйте экземпляр.Во-вторых, вы можете назвать свои методы лучше._getProxy() Я бы подумал, что вернет что-то, а не повлияет на состояние приложения.

Теперь, для вашего точного вопроса:

  1. Это HTTP-прокси?Если это так, следует ли вам установить CURLOPT_HTTPPROXYTUNNEL в значение true?

  2. Вы объявляете proxyType равным 1 по умолчанию в setProxy, но тогда вы никогда не установите self::$proxyType,И вы никогда не устанавливаете CURLOPT_PROXYTYPE на CURLPROXY_HTTP (вам не нужно, но я бы сказал явно).

  3. Вы никогда не объявляете какую-либо аутентификацию для прокси.Это открытый прокси?

  4. Вы уверены, что прокси действительно прослушивает этот IP и порт?Это нестандартный порт ... Попробуйте открыть соединение с сервера и посмотрите, что произойдет:

    $f  = fsockopen('XXX.XXX.XXX.XXX', 'XXXX');
    if (!$f) die('Server not accepting connections');
    fwrite($f, "q\r\n\r\n");
    var_dump(fread($f, 4048));
    fclose($f);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...