Проблема следующего рода... если приходится открывать соединение через прокси (Серию прокси) выдается ошибка при попытки получения контента с сайта (В случае если он 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 RequestYour browser sent a request that this server could not understand.
Подскажите плз что я делаю неправильно.Заранее благодарен.
>Подскажите плз что я делаю неправильно.connect это отдельный запрос к прокси.
Не надо в него впихивать запрос к сервису. Это 2 разные запроса.
Сначала connect, а уж потом (после успешного ответа) можно посылать http запросы.
Изменил скрип получилось теперь вот так
$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: CloseGET / 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: CloseBad 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
Что-то опять не то...
Чуть не забыл, Соединение с проксей выдало:
HTTP/1.0 200 Connection established
>Что-то опять не то...Эх, а кто, собственно, будет делать ssl? Прокси сервер может, если его правильно настроить. После беглого просмотра документации php получается, что через fsockopen такого сделать нельзя. Используйте curl, он вроде умеет.
>Используйте curl, он вроде умеет.cURL умеет и через прокси пролезать сам, и ssl ))