Привет. Никак не могу понять в чем ошибка. Пишу: Код (Text): $proxyarr=explode(":",$proxy); if ($socket = @fsockopen($proxyarr[0], $proxyarr[1], $errno, $errstr, 30)) { $request = "GET $host$target?$querystring HTTP/1.0\r\n"; $request .= "Host: $proxyarr[0]\r\n"; $request .= "User-Agent: ".$userAgent."\r\n"; $request .= "Accept-Language: en-us, en;q=0.50\r\n"; $request .= "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n"; $request .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $request .= "Connection: close\r\n"; $request .= "Cache-Control: max-age=0\r\n\r\n"; stream_set_timeout ( $socket,10); fwrite( $socket, $request ); $ret = ''; while (!feof($socket)) { $ret .= fread($socket,4096); } fclose($socket); $contents = trim(substr($ret,strpos($ret,"\r\n\r\n") + 4)); не работает. Если пишу Код (Text): if ($socket = @fsockopen($host, "80", $errno, $errstr, 30)) { $request = "GET $target?$querystring HTTP/1.0\r\n"; $request .= "Host: $host\r\n"; $request .= "User-Agent: ".$this->userAgent."\r\n"; $request .= "Accept-Language: en-us, en;q=0.50\r\n"; $request .= "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n"; $request .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $request .= "Connection: close\r\n"; $request .= "Cache-Control: max-age=0\r\n\r\n"; stream_set_timeout ( $socket,10); fwrite( $socket, $request ); $ret = ''; while (!feof($socket)) { $ret .= fread($socket,4096); } fclose($socket); $contents = trim(substr($ret,strpos($ret,"\r\n\r\n") + 4)); работает. Не могу понять где ошибка.
на первый взгляд. $proxyarr[0] - адрес прокси, а не хоста. Поэтому в третьей строке нужно не его ставить, а название хоста. P.S. А может лучше делать через cURL?
Ставлю - не помогает. Все равно нулевой запрос возвращает. Я и делаю через cURL. Но это пишется класс универсальный, и чтобы не париться я делаю поддержку сокетов, дабы при установке на другой хост не возникло проблем.
PHP: <? $host='php.ru'; // .... $request = "GET [url=http://$host$target?$querystring]http://$host$target?$querystring[/url] HTTP/1.0\r\n"; $request .= "Host: {$host}\r\n";?> Работает. Т.е. хост должен быть без http://, а GET с http://
Если не видите разницы между названием хоста и URL, то я пасс. Все нужное для работы я написал. Если все равно будут трудности, то поставьте на закачку во FlashGet какой-нибудь файл и смотрите, какие заголовки он отправляет.
я бы еще посоветовал внимательно изучить: Код (Text): gw(440hz):~$>curl -v php.ru | head -10 * About to connect() to php.ru port 80 * Trying 82.140.81.242... connected * Connected to php.ru (82.140.81.242) port 80 > GET / HTTP/1.1 > User-Agent: curl/7.14.0 (i386-portbld-freebsd5.3) libcurl/7.14.0 OpenSSL/0.9.7d zlib/1.2.1 > Host: php.ru > Accept: */* > < HTTP/1.1 200 OK < Date: Tue, 05 Dec 2006 07:35:33 GMT < Server: Apache < X-Powered-By: PHP/7.2 < Set-Cookie: BILLING_LNG=ru; expires=Wed, 05 Dec 2007 07:35:33 GMT; path=/ < X-HTML-Builder: 2000-2006 (c) OOPS Inferno v 8.6 by 440hz < Expires: Mon, 26 Jul 1997 05:00:00 GMT < Last-Modified: Tue, 05 Dec 2006 07:35:33 GMT < Cache-Control: no-cache, must-revalidate < Pragma: no-cache < Set-Cookie: OOPS_SID=0errdsay82v4chez; expires=Tue, 12 Dec 2006 07:35:33 GMT; path=/ < Transfer-Encoding: chunked < Content-Type: text/html; charset=utf-8 < Content-Language: ru <!-- php.ru team: mz, az, yuri, vb, def, cyxapuk, 440hz expi-web.com (c) 2005, 2006, etc. --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> p.s. писать проксю не понимая разницы между URL и hostname? гм... куда мир катиться?
Сорри всем Я почему то неправильно понял и решил что хост должен быть без WWW, а GET с WWW. Поэтому и написал. Ладно - поробую. Спасибо