|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » сокеты |
|
|
сокеты
|
![]() Ветеран Сообщения: 640 |
вот скажите мне, как через протокол 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 ведь браузер и прокси както избавляются от этих символов перед выдачей на экран, но как??(( сам скрипт запроса ниже, возможно его надо дополнить для решения этой задачи, но чем??
|
|
------- Отправлено: 04:25, 30-07-2006 |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать E-mail
А обязательно нужно по HTTP 1.1 запрашивать?? Я например в основном делаю запросы по версии 1.0, там например нет всех этих проблем с chunked |
------- Отправлено: 14:11, 30-07-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 640
|
Профиль | Сайт | Отправить PM | Цитировать vadimiron
мы не ищем легких путей ![]() да дело на самом деле не в легком пути, просто этот протокол де факто, порядком уже устарел как никак более 10 лет спецификации, да и там вообще ничего нет почти, к счастью нужно через http 1.1 .. в общем не до комца еще разобрался с этим алгоритмом передачи, что делать когда сервер не отдает длину тела.. |
------- Отправлено: 17:55, 30-07-2006 | #3 |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать E-mail
Да длинну тела то не обязательно знать, читай пока сокет чтото возвращает и всё (но это конечно только для 1.0) Другое дело как обходиться с Transfer-Encoding: chunked Фишка в том, что это число (106b4) и есть размер, но вроде в восмиричной системе Ноль в конце означает, что больше нет данных для передачи. То есть можно сообщение на много кусков разбить, какждый кусок начинается с размера куска, потом <CR><LF>, далее сам кусок, и так далее... а заканчивается на 0<CR><LF> |
------- Отправлено: 18:11, 30-07-2006 | #4 |
![]() Ветеран Сообщения: 640
|
Профиль | Сайт | Отправить PM | Цитировать vadimiron в 16-ричной,
я пытаюсь понять по какому алгоритму браузеры и прокси обрезают эти размеры кусков, они для каждой страницы свои, и кусков для каждой страницы свое количество и еще насколько понимаю размер не до а после куска идет |
|
------- Отправлено: 18:31, 30-07-2006 | #5 |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Цитата:
Цитата:
сначало берём строчку до первого <CR><LF>, эта строчка является размером куска, далее читаем столько символов, на сколько этот размер указывает, далее снова читаем строчку с размером и тд..... если строчка с размером равна 0, значит больше не читаем Кстати, эту всю историю с Transfer-Encoding: chunked как раз придумали, чтобы отсылать куски ещё неполностью сгенерированного документа, поэтому полный размер и нельзя знать. |
||
------- Отправлено: 18:44, 30-07-2006 | #6 |
![]() Ветеран Сообщения: 640
|
Профиль | Сайт | Отправить PM | Цитировать 106b4 - это рамер того что было до, следовательно цифра пишется после куска
Цитата:
![]() как ты отделишь размер куска от самого куска пример к скрипту в студию можно?) например к меилру |
|
------- Отправлено: 19:02, 30-07-2006 | #7 |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать E-mail
Цитата:
Код могу завтра написать, смысл прост: после хедеров читаем с помощью fgets строку с размером куска, далее обычный fread c размером куска, полученным с помощью fgets и тд до нуля |
|
------- Отправлено: 19:19, 30-07-2006 | #8 |
![]() Ветеран Сообщения: 640
|
Профиль | Сайт | Отправить 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 если так -> значит после ![]() Цитата:
очень интересно посмотреть на рабочий пример |
||
------- Отправлено: 20:16, 30-07-2006 | #9 |
![]() Ветеран Сообщения: 640
|
Профиль | Сайт | Отправить PM | Цитировать vadimiron ну как там с примером?..
|
------- Отправлено: 00:21, 05-08-2006 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Выбор кулера под 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 |
|