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 RequestYour browser sent a request that this server could not understand. Подскажите плз что я делаю неправильно.Заранее благодарен.
|
- PHP fsockopen через прокси , svn, 00:26 , 13-Апр-09 (1)
>Подскажите плз что я делаю неправильно. connect это отдельный запрос к прокси. Не надо в него впихивать запрос к сервису. Это 2 разные запроса. Сначала connect, а уж потом (после успешного ответа) можно посылать http запросы.
- PHP fsockopen через прокси , Summoner, 08:50 , 13-Апр-09 (2)
Изменил скрип получилось теперь вот так
$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: 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, 08:53 , 13-Апр-09 (3)
Чуть не забыл, Соединение с проксей выдало: HTTP/1.0 200 Connection established
- PHP fsockopen через прокси , JohnProfic, 17:41 , 13-Апр-09 (4)
>Что-то опять не то... Эх, а кто, собственно, будет делать ssl? Прокси сервер может, если его правильно настроить. После беглого просмотра документации php получается, что через fsockopen такого сделать нельзя. Используйте curl, он вроде умеет.
- PHP fsockopen через прокси , svn, 19:17 , 13-Апр-09 (5)
>Используйте curl, он вроде умеет. cURL умеет и через прокси пролезать сам, и ssl ))
|