Помогите с fsockopen

12
KA
На сайте с 03.01.2007
Offline
137
1423

Добрый день

Начал изучать работу fsockopen и наткнулся на проблему

Хочу подключиться к _lectro.ru, что-то не так с определением хоста - выдает содержимое сайта _cinema.artpragmatica.ru, видимо тоже расположенного на этом айпи

<?php

$host='lectro.ru';
$ip=gethostbyname($host);
echo $ip.'<hr>';
$sock = fsockopen($ip, 80, $errno, $errstr,30);
if (!$sock)
{
echo "$errstr ($errno)<br />\n";
}
else
{
$out="GET / HTTP/1.0\r\n
Host: lectro.ru\r\n
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11\r\n
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n
Connection: keep-alive\r\n
";
fwrite($sock, $out);
while (!feof($sock)) {
echo fgets($sock, 1024);
}
fclose ($sock);
}
?>
Интернет магазин оптических приборов (http://oz.com.ua) в Украине - бинокли, микроскопы, телескопы.
N
На сайте с 06.05.2007
Offline
419
#1

Выхода у вас два : прочитать http/1.1 и построить велосипед, либо использовать готовые функции из библиотеки curl.

Сейчас можно указать GET / HTTP/1.1\r\n и тем самым немного отсрочить погибель.

С некоторыми сайтами это будет работать, до тех пор пока вы не наткнетесь на Transfer-Encoding: chunked, обработку которого, в соответствии со стандартом http/1.1, вы обязаны реализовать.

Кнопка вызова админа ()
BR
На сайте с 28.06.2008
Offline
75
#2

Попробуйте написать так:

"GET http://lectro.ru/ HTTP/1.0\r\n
размещение сайтов (http://www.brim.ru)
[Удален]
#3

пожалуйста подскажите, я туплю или ТС

Connection: keep-alive\r\n

это же херня полная?

Connection: keep-alive

\r\n - лишние!

dvaes
На сайте с 03.09.2007
Offline
65
#4

может будете обращаться не по ip?


$sock = fsockopen($host, 80, $errno, $errstr,30);
[Удален]
#5
dvaes:
может будете обращаться не по ip?

$sock = fsockopen($host, 80, $errno, $errstr,30);

это насрать, почитайте про HTTP запрос http://en.wikipedia.org/wiki/HTTP

dvaes
На сайте с 03.09.2007
Offline
65
#6

bearman прав. уберите везде \r\n кроме конца. чтоб было

Connection: keep-alive\r\n\r\n";

и

Accept-Encoding: gzip,deflate

можно убрать, а то вам будет передаваться сжатый контент

Pentium Prescott
На сайте с 23.10.2008
Offline
213
#7

Надо не по ip обращаться

Попробуй набери в браузере lectro.ru а потом 62.213.126.229 - результаты разные..

Покупка и продажа криптовалют ( https://www.bestchange.ru/?p=1296834 )
[Удален]
#8
Pentium Prescott:
Надо не по ip обращаться

Попробуй набери в браузере lectro.ru а потом 62.213.126.229 - результаты разные..

не зря у вас статус "студент". вы абсолютно не правы. почитатйте про спейификацию HTTP протокола и думаю вам многое станет понятно.

lnx
На сайте с 26.07.2008
Offline
128
lnx
#9
dvaes:

Accept-Encoding: gzip,deflate
можно убрать, а то вам будет передаваться сжатый контент

Не будет, потому что в самом начале указана версия http 1.0, который не поддерживает сжатие, потому веб-сервер должен проигнорировать строку Accept-Encoding

А вообще не вижу смысла получать по-http ч-з сокеты.

Для этого есть надежные и проверенные curl + file_get_contents

KA
На сайте с 03.01.2007
Offline
137
#10
dvaes:
bearman прав. уберите везде \r\n кроме конца. чтоб было
Connection: keep-alive\r\n\r\n";
и
Accept-Encoding: gzip,deflate
можно убрать, а то вам будет передаваться сжатый контент

убрал, заработало. спасибо)

KOSMOS aka Anarion добавил 26.10.2008 в 00:29

netwind:
Выхода у вас два : прочитать http/1.1 и построить велосипед, либо использовать готовые функции из библиотеки curl.
Сейчас можно указать GET / HTTP/1.1\r\n и тем самым немного отсрочить погибель.
С некоторыми сайтами это будет работать, до тех пор пока вы не наткнетесь на Transfer-Encoding: chunked, обработку которого, в соответствии со стандартом http/1.1, вы обязаны реализовать.

спасибо за совет, буду читать про curl

KOSMOS aka Anarion добавил 26.10.2008 в 00:30

lnx:
Не будет, потому что в самом начале указана версия http 1.0, который не поддерживает сжатие, потому веб-сервер должен проигнорировать строку Accept-Encoding

А вообще не вижу смысла получать по-http ч-з сокеты.
Для этого есть надежные и проверенные curl + file_get_contents

file_get_contents использывал раньше, возникла проблема с передачей параметров

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий