LINUX.ORG.RU

Вопросик по phyton


0

0

Можло ли как-нибудь реализовать открытие не всей страницы urlopen`ом а только с определённого байта по определённый? Или возможно ли посылая запрос на страницу определить которая из 2х возможных возвращается? (опять же не считывая всё страницу)

з.ы. это всё для экономии трафика бедных российских студентов =)


Дело вовсе не в питоне, а в протоколе HTTP. И мне почему-то кажется, что там не предусмотрено такой фичи.

phoenix ★★★★
()
Ответ на: комментарий от phoenix

ничего подобного, дело не в протоколе. простая проверка:

$ curl http://linux.org.ru/index.jsp | head -n 5 > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 21 38552   21  8320    0     0   6706      0  0:00:05  0:00:01  0:00:04 29876
curl: (23) Failed writing body


curl успел скачать 8k из 38, пока пайп не закрылся.
причем число 8320 случайно и превосходит необходимое количество байт не более
чем на размер буфера.

следует посмотреть исходники urllib2, и если там подобная фича не предусмотрена,
реализовать самому. Благо открыть сокет и сказать "GET index.html" не так уж сложно.
даже на питоне

anonymous
()
Ответ на: комментарий от anonymous

Естественно, что на уровне _сокетов_ можно докачать до определенного места и остановиться. А Вы можете показать как сделать тоже самое на уровне HTTP? (вроде того, что запросить только кусок файла с байта N до байта M)

phoenix ★★★★
()
Ответ на: комментарий от phoenix

кстати вполне возможно что бедным студентам надо не запрашивать кусок страницы до нужного места, а спрашивать изменилась ли она.

anonymous
()
Ответ на: комментарий от anonymous

Посмотрел, RFC 2616 пункт 14.35. Есть такая фигня, не знал :) Добавляется заголовок
--
Range: bytes=0-10
--
и никаких проблем.
Проверил на LOR - работатет, а вот Zope 2.7 похоже не поддерживает данную фичу

phoenix ★★★★
()
Ответ на: комментарий от anonymous

Не..проверка изменения это не то...а за остальные советы большое спасибо!

SpaceR
() автор топика
Ответ на: комментарий от phoenix

phoenix: Слушай не подскажешь как ты формировал заголовок? И на питоне ли проверял? А то вроде всё делаю по спецификации, но чё-то не работает...

SpaceR
() автор топика
Ответ на: комментарий от SpaceR

Я проверял telnet-ом, непосредственно на питоне не пробовал. 
--
telnet www.linux.org.ru 80
GET /index.jsp HTTP/1.1
Host: www.linux.org.ru
Connection: close
Range: bytes=0-10 (вот здесь в соотв-ии с 14.35)
\n\r\n\r
--
Все работает (с Апачем).

Вроде в urllib2 можно создать запрос типа
--
req = urllib2.Request(..., headers = <заголовки>)
--
попробуй

phoenix ★★★★
()
Ответ на: комментарий от phoenix

нда...я так и делал...не хавает он это... правда urlopen посылает GET HTTP/1.0...насколько я понимаю в этом и кроется проблема...ну да буду копать =)

SpaceR
() автор топика
Ответ на: комментарий от phoenix

Нда...оказывается HTML/1.0 включён в usrlib2 по умолчанию...нашёл как это переделать, но перестаёт работать сам модуль когда переключаю...вернее заголовок он посылает и получает заголовок ответа, а дальше куча эроров(скорре всего потому что для html/1.0 это нестандартный заголовок)

SpaceR
() автор топика
Ответ на: комментарий от SpaceR

> скорре всего потому что для html/1.0 это нестандартный заголовок
Это опечатка или ты действительной посылал HTML/1.0 ? HTTP/1.1

phoenix ★★★★
()
Ответ на: комментарий от phoenix

опечатка :))) не настолько я нулевой :))

SpaceR
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.