Как стать автором
Обновить

Комментарии 32

Спасибо, давно хотел что то подобное
Соглашусь! Вспоминаю, как я мучился с urllib2
Достаточно удобно. Но ИМХО код для urllib2 раздут. Количество строк можно ужать раза в 3. Хотя, конечно, элегантности как в 1м примере добиться не получится.
Еще есть httplib2, среди авторов люди из Nokia, Google и т.п.
Переусложненная и глючит. Пришлось форкать couchdb-python, что б избавится от нее (перешел на cURL).

cURl тоже не подарок в плане api, но зато очень стабильная.
Оно совсем маленькое и сыроватое (с виду). В частности, мне нужны HEAD/POST/PUT/DELETE-запросы.
Ну вообще я grab уже года 3-4 юзаю. Много задач им решал. С точки зрения документации сырой, да.
Вот быстроенько протестировал — он умеет слать нужные запросы. dumpz.org/76084/
Я работал только с get/post, put/delete/head никогда не нужны были.
Что вы имели в виду под «совсем маленькое» я не очень понял.
API куцое (или не туда смотрел?), пара методов и все.

Мне достаточно своей простенькой обертки над pycurl, в общем-то.

P.S. HEAD-запросы требуют немного другой инициализации в cURL (надо отключить ожидание тела ответа). В остальном хз. Просто мне не нужно :)
Не туда смотрели, надо в сорцы смотреть :)

> P.S. HEAD-запросы требуют немного другой инициализации в cURL (надо отключить ожидание тела ответа)

Так там так и сделано, опция NOBODY выставляется: bitbucket.org/lorien/grab/src/9f1d856bba3d/grab/ext/pycurl.py

Да просто решил засветить либу, может кому-то пригодиться и хватит терпения разобраться. Документация хромает, она у меня не в приоритете. Мои личные нужды grab полность покрывает.
Чё-то хабропарсер выжрал hash-часть из ссылки. Строку под номером 131 там надо смотреть.
> Так там так и сделано, опция NOBODY выставляется:

А, точно, пропустил. Ладно, посмотрим, может где и заюзаю.

Вообще, по хорошему, стоило бы привести в порядок pycurl. А то в нем есть _curl для низкоуровневых операций и curl для типа высокоуровневых, но при этом половину апи потеряли, а то что сделали — через одно место, совсем не pythonic-way.

А держать враппер поверх враппера мне совесть не позволяет.
Согласен. libcurl пусть и не подарок, но я для себя под него написал мелкую библиотечку-обертку и теперь код выглядит нагляднее и элегантнее.
И оно того стоит в плане скорости, keep-alive, компрессии у libcurl и много другого вкусного.
Перешел на libcurl года три-четыре назад и до сих пор доволен.
Я так понимаю эта библиотека частично обертка над urllib2?
Можно попробовать как REST клиент использовать.
Слабоватое описание, принципиальные вопросы не затронуты. Например, поддерживает ли она сессии.
Да и библиотека слабоватая, нет digest auth, ntlm.
Забавно, я когда-то делал нечто похожее (libhttp)
НЛО прилетело и опубликовало эту надпись здесь
Вот это дзен-питон!
В чём тут дзен-питон?

Простое лучше, чем сложное

Читаемость имеет значение.

Удивительно тогда, что в самом Пайтоне куча модулей для работы с HTTP и ни одного читаемого и простого.
ничего удивительного — подозреваю, что их писал не Сам, а залетные жависты.
Использование синглетонов — не самая светлая идея
где вы синглтоны видите?
А вы в код авторизатора и proxy смотрели?
Извиняюсь — до конца не долистал
НЛО прилетело и опубликовало эту надпись здесь
Хомяки-дизайнеры в восторге.
Код с urllib2 излишне раздут. Если не заморачиваться с аутенфикацией, то дерганье урлов решается одной строкой:

import urllib2

response = urllib2.urlopen("http://example.com")
print response.code, response.read()


Кстати, умеет ли сабж определять тип аутенфикации прокси, как это умеет cURL?
А если продолжать спец. олимпиаду по упрощению кода на urllib2, то даже с аутентификацией будет достаточно кратко:

handler = urllib2.HTTPBasicAuthHandler()
handler.add_password('', 'https://api.github.com', 'user', 'pass')
response = urllib2.build_opener(auth_handler).open('https://api.github.com')
print response.code, response.read()
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории