Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » сокеты

Ответить
Настройки темы
сокеты

Аватара для E-mail

Ветеран


Сообщения: 640
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


вот скажите мне, как через протокол http 1.1 снять копию контента с удаленного web сервера, без дополнений и изменений считывая построчно функцией

fgets($f,1024);

если сервер не отдает content-lenght и использует кодирование Transfer-Encoding: chunked ??

вот вам и пример ответа этого форума:

Код: Выделить весь код
HTTP/1.1 200 OK
Date: Sun, 30 Jul 2006 00:03:36 GMT
Server: Apache/1.3.34 (Unix) mod_accounting/0.5 PHP/4.4.2
X-Powered-By: PHP/4.4.2
Set-Cookie: ***
Set-Cookie: ***
Set-Cookie: ***
Expires: 0
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=Windows-1251

106b4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="ru">
<head>
	<!-- no cache headers -->
	<meta http-equiv="Pragma" content="no-cache" />

</script>
</body>
</html>
0
как видно выше, появляются символы 0 и 106b4, если запрашивать у меилру, будут соответственно другие символы, я пытаюсь понять как принимать контент без этих символов, они я так понимаю несут какуето служебную информацию

ведь браузер и прокси както избавляются от этих символов перед выдачей на экран, но как??((

сам скрипт запроса ниже, возможно его надо дополнить для решения этой задачи, но чем??

PHP код: Выделить весь код

$f=fsockopen("forum.oszone.ru","80",80);

fputs($f,"GET http://forum.oszone.ru HTTP/1.1\r\nHost: forum.oszone.ru\r\n\r\n");
while(!
feof($f))
{
    
$tmp=fgets($f,1024);
    
$content    .=    $tmp;
}
fclose($f);

echo 
$content

-------
Основы HTML | Конференции


Отправлено: 04:25, 30-07-2006

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


E-mail
А обязательно нужно по HTTP 1.1 запрашивать??
Я например в основном делаю запросы по версии 1.0, там например нет всех этих проблем с chunked

-------
Fortes fortuna adiuvat


Отправлено: 14:11, 30-07-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для E-mail

Ветеран


Сообщения: 640
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


vadimiron
мы не ищем легких путей
да дело на самом деле не в легком пути, просто этот протокол де факто, порядком уже устарел как никак более 10 лет спецификации,

да и там вообще ничего нет почти, к счастью нужно через http 1.1 .. в общем не до комца еще разобрался с этим алгоритмом передачи, что делать когда сервер не отдает длину тела..

-------
Основы HTML | Конференции


Отправлено: 17:55, 30-07-2006 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


E-mail
Да длинну тела то не обязательно знать, читай пока сокет чтото возвращает и всё (но это конечно только для 1.0)
Другое дело как обходиться с Transfer-Encoding: chunked
Фишка в том, что это число (106b4) и есть размер, но вроде в восмиричной системе
Ноль в конце означает, что больше нет данных для передачи. То есть можно сообщение на много кусков разбить, какждый кусок начинается с размера куска, потом <CR><LF>, далее сам кусок, и так далее... а заканчивается на 0<CR><LF>

-------
Fortes fortuna adiuvat


Отправлено: 18:11, 30-07-2006 | #4


Аватара для E-mail

Ветеран


Сообщения: 640
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


vadimiron в 16-ричной,
я пытаюсь понять по какому алгоритму браузеры и прокси обрезают эти размеры кусков, они для каждой страницы свои, и кусков для каждой страницы свое количество и еще насколько понимаю размер не до а после куска идет

-------
Основы HTML | Конференции


Отправлено: 18:31, 30-07-2006 | #5


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата:
и еще насколько понимаю размер не до а после куска идет
Нет, размеры должны до куска идти, какой смысл их в конец ставить

Цитата:
я пытаюсь понять по какому алгоритму браузеры и прокси обрезают эти размеры кусков,
А что не понятного? Браузер видит в загаловке, что тело будет chunked, поэтому он после всех хедеров читает по принципу:
сначало берём строчку до первого <CR><LF>, эта строчка является размером куска, далее читаем столько символов, на сколько этот размер указывает, далее снова читаем строчку с размером и тд..... если строчка с размером равна 0, значит больше не читаем

Кстати, эту всю историю с Transfer-Encoding: chunked как раз придумали, чтобы отсылать куски ещё неполностью сгенерированного документа, поэтому полный размер и нельзя знать.

-------
Fortes fortuna adiuvat


Отправлено: 18:44, 30-07-2006 | #6


Аватара для E-mail

Ветеран


Сообщения: 640
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


106b4 - это рамер того что было до, следовательно цифра пишется после куска


Цитата:
Кстати, эту всю историю с Transfer-Encoding: chunked как раз придумали, чтобы отсылать куски ещё неполностью сгенерированного документа, поэтому полный размер и нельзя знать.
вот именно, как можно знать цифру размера куска до подготовки к отправке

как ты отделишь размер куска от самого куска пример к скрипту в студию можно?)
например к меилру

-------
Основы HTML | Конференции


Отправлено: 19:02, 30-07-2006 | #7


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


E-mail
Цитата:
106b4 - это рамер того что было до, следовательно цифра пишется после куска
Не-а, в начале. Размер куска мы то знаем, который посылаем, единственно. что мы не знаем, так это размер всего сообщения, то есть размер всей страницы. Чтобы не ждать генерацию всей страницы, можно посылать то, что уже сгенерированно.

Код могу завтра написать, смысл прост: после хедеров читаем с помощью fgets строку с размером куска, далее обычный fread c размером куска, полученным с помощью fgets и тд до нуля

-------
Fortes fortuna adiuvat


Отправлено: 19:19, 30-07-2006 | #8


Аватара для E-mail

Ветеран


Сообщения: 640
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


vadimiron

Цитата:
Не-а, в начале
длдинна вот этого:

Код: Выделить весь код
HTTP/1.1 200 OK
Date: Sun, 30 Jul 2006 00:03:36 GMT
Server: Apache/1.3.34 (Unix) mod_accounting/0.5 PHP/4.4.2
X-Powered-By: PHP/4.4.2
Set-Cookie: ***
Set-Cookie: ***
Set-Cookie: ***
Expires: 0
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=Windows-1251
равна вот этому 106b4

если так -> значит после

Цитата:
после хедеров читаем с помощью fgets строку с размером куска, далее обычный fread
у меня freead не пригодился (см. выше)

очень интересно посмотреть на рабочий пример

-------
Основы HTML | Конференции


Отправлено: 20:16, 30-07-2006 | #9


Аватара для E-mail

Ветеран


Сообщения: 640
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


vadimiron ну как там с примером?..

-------
Основы HTML | Конференции


Отправлено: 00:21, 05-08-2006 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » сокеты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Выбор кулера под AMD сокеты alarm zone 13 Разгон, охлаждение и моддинг 2 09-10-2009 21:02
Не работают сокеты в PHP Coutty Вебмастеру 2 11-01-2008 17:20
Проблема при пересылке текста через сокеты из win в nix. lytdybr Программирование в *nix 8 07-11-2007 23:42
Сокеты на Си во FreeBSD Zloixxx Программирование в *nix 3 15-06-2007 19:29
*Теория* | Сокеты XPurple Программирование и базы данных 1 25-09-2006 12:05




 
Переход