URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8212
[ Назад ]

Исходное сообщение
"PHP fsockopen через прокси "

Отправлено Summoner , 12-Апр-09 21:29 
Проблема следующего рода... если приходится открывать соединение через прокси (Серию прокси) выдается ошибка при попытки получения контента с сайта (В случае если он https)
вот написал простейший  код что бы проверить может гдето запутался тут тоже самое:
$proxy = '62.94.22.204';
$proxy_port = '8080';
$host = 'banking.ukrgarant.com';
$host_port = '443';
$fp = @fsockopen($proxy, $proxy_port);
if ($fp)
{
    fputs($fp, 'CONNECT '.$host.':'.$host_port.' HTTP/1.1'."\r\n");
    fputs($fp, 'Connection: Close'."\r\n\r\n");
    fputs($fp, 'GET / HTTP/1.1'."\r\n");
    fputs($fp, 'Host: banking.ukrgarant.com'."\r\n");
    fputs($fp, 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009033100 Ubuntu/9.04 (jaunty) Firefox/3.0.8'."\r\n");
    fputs($fp, 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'."\r\n");
    fputs($fp, 'Accept-Language: ru,en-us;q=0.7,en;q=0.3'."\r\n");
    fputs($fp, 'Accept-Encoding: gzip,deflate'."\r\n");
    fputs($fp, 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'."\r\n");
    fputs($fp, 'Keep-Alive: 300'."\r\n");
    fputs($fp, 'Connection: keep-alive'."\r\n");
    fputs($fp, 'Cookie: PHPSESSID=uioiaatus86u713jpchi31r8o0'."\r\n");
    fputs($fp, 'Cache-Control: max-age=0'."\r\n");
    fputs($fp, 'Connection: Close'."\r\n\r\n");
    while(!feof($fp))
    {
        echo fgets($fp, 4096);
    }
}

Вот ответ сервера
HTTP/1.1 400 Bad Request Date: Sun, 12 Apr 2009 17:21:48 GMT Server: Apache/2.2.3 (CentOS) Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request

Your browser sent a request that this server could not understand.


Подскажите плз что я делаю неправильно.

Заранее благодарен.


Содержание

Сообщения в этом обсуждении
"PHP fsockopen через прокси "
Отправлено svn , 13-Апр-09 00:26 
>Подскажите плз что я делаю неправильно.

connect это отдельный запрос к прокси.

Не надо в него впихивать запрос к сервису. Это 2 разные запроса.
Сначала connect, а уж потом (после успешного ответа) можно посылать http запросы.


"PHP fsockopen через прокси "
Отправлено Summoner , 13-Апр-09 08:50 
Изменил скрип получилось теперь вот так

$proxy = 'XXX.XXX.XXX.XXX';
$proxy_port = '3128';
$host = 'banking.ukrgarant.com';
$host_port = '443';
$fp = @fsockopen($proxy, $proxy_port);
if ($fp)
{
    $query = 'CONNECT '.$host.':'.$host_port.' HTTP/1.1'."\r\n";
    $query .= 'Connection: Close'."\r\n\r\n";
        fputs($fp, $query);
        echo $query;
    while(!feof($fp))
    {
        $t = fgets($fp, 1024);
        echo $t."<br/>";
        if ($t == "\r\n")
        {
            break;
        }
    }
    
    $query = 'GET / HTTP/1.1'."\r\n";
    $query .= 'Host: banking.ukrgarant.com'."\r\n";
    $query .= 'User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009033100 Ubuntu/9.04 (jaunty) Firefox/3.0.8'."\r\n";
    $query .= 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'."\r\n";
    $query .= 'Accept-Language: ru,en-us;q=0.7,en;q=0.3'."\r\n";
    $query .= 'Accept-Encoding: gzip,deflate'."\r\n";
    $query .= 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'."\r\n";
    $query .= 'Keep-Alive: 300'."\r\n";
    $query .= 'Connection: keep-alive'."\r\n";
    $query .= 'Cookie: PHPSESSID=uioiaatus86u713jpchi31r8o0'."\r\n";
    $query .= 'Cache-Control: max-age=0'."\r\n";
    $query .= 'Connection: Close'."\r\n\r\n";
    fputs($fp, $query);
    echo $query;
    while(!feof($fp))
    {
        echo fgets($fp, 4096);
    }
}

Результат выполнения такой
CONNECT banking.ukrgarant.com:443 HTTP/1.1
Connection: Close

GET / HTTP/1.1
Host: banking.ukrgarant.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009033100 Ubuntu/9.04 (jaunty) Firefox/3.0.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=uioiaatus86u713jpchi31r8o0
Cache-Control: max-age=0
Connection: Close

Bad Request

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.

    Hint: https://banking.ukrgarant.com/

Apache/2.2.3 (CentOS) Server at banking.ukrgarant.com Port 443


Что-то опять не то...

"PHP fsockopen через прокси "
Отправлено Summoner , 13-Апр-09 08:53 
Чуть не забыл, Соединение с проксей выдало:
HTTP/1.0 200 Connection established

"PHP fsockopen через прокси "
Отправлено JohnProfic , 13-Апр-09 17:41 
>Что-то опять не то...

Эх, а кто, собственно, будет делать ssl? Прокси сервер может, если его правильно настроить. После беглого просмотра документации php получается, что через fsockopen такого сделать нельзя. Используйте curl, он вроде умеет.


"PHP fsockopen через прокси "
Отправлено svn , 13-Апр-09 19:17 
>Используйте curl, он вроде умеет.

cURL умеет и через прокси пролезать сам, и ssl ))