Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 29, 2012 23:10:15

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Grab тред

lorien
Т.е. вы считаете, что я вас козлом обозвал и продолжаете общаться? У вас, видимо, склонность к мазохизму.
Нет, я не думаю, что Вам это было ясно. Вы просто чюрка.

Зачем Вы приписываете мне свои фантазии? Если Вам уж так интересно, могу Вам на лицо пописать, или там бревно в жопу запихать. Может, сойдемся.

lorien
Другим плевать на мою культуру? А с какой стати я тогда должен им помогать?
На нее всем плевать, кроме тех, которые решат закоммитить код - а это процентов так 99%. Не хотите помогать? Ну так перестаньте темы поднимать. Че ж Вы тут сидите?

То есть, фичи Вы по предложению юзеров не добавляете, а только встраиваете их код?

Офлайн

#2 Июнь 29, 2012 23:32:34

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Grab тред

Ну почему не светит, одного претендента на черенкование уже нашел.

Отредактировано odnochlen (Июнь 29, 2012 23:32:50)

Офлайн

#3 Июнь 29, 2012 23:58:20

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Grab тред

Нет, искал я другое, просто тут наткнулся на одного. Я не любитель, но если уж такое чудо выползло, грех отказаться. Оно ж не успокоится, пока ему очко не почешут.

Офлайн

#4 Июнь 30, 2012 09:55:23

alexey-grom
От: Новосибирск
Зарегистрирован: 2012-03-09
Сообщения: 14
Репутация: +  3  -
Профиль   Отправить e-mail  

Grab тред

К слову об “у..бищном” pycurl: есть pylibcurl, питоник, очень приятный в использовании, читабельный etc, но на тестах на 30% медленнее pycurl.
Вопрос производительности транспорта запросов актуален и терять эту производительность ради того чтобы зависимости были питоник - глупость. Будто без этого узких мест мало.
А pycurl в полне адекватен сишной природе curl, если вы понимаете о чем я… ^_^



Офлайн

#5 Июнь 30, 2012 10:02:58

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Grab тред

alexey-grom
К слову об “у..бищном” pycurl: есть pylibcurl, питоник, очень приятный в использовании, читабельный etc, но на тестах на 30% медленнее pycurl.
Что значит медленнее? Больше проц грузит? Я сомневаюсь, что где-то что-то упрется именно в транспорт, а не парсер. Или качает медленнее?

Ну во-первых, в pycurl без бутылки не разберешься, а во-вторых, может такое быть, что вообще не весь curl api доступен через pycurl? Как сделать аплоад файла через функцию чтения потока?

Если pylibcurl такой питонический, странно, что я про него не слышал. Люди до того доходили, что юзали голый pycurl.

Отредактировано odnochlen (Июнь 30, 2012 10:28:43)

Офлайн

#6 Июнь 30, 2012 10:35:15

alexey-grom
От: Новосибирск
Зарегистрирован: 2012-03-09
Сообщения: 14
Репутация: +  3  -
Профиль   Отправить e-mail  

Grab тред

pycurl прост и туп, как и сам curl.
curl & pycurl умеют скачивать ответ сервера в файл. Мне известны два способа: своя callback функция (которая может еще например решать куда лучше сохранять: в память или временный файл) и curl.setopt(pycurl.WRITEDATA, open('filename', ‘wb’) (тут пример http://pycurl.cvs.sourceforge.net/viewvc/pycurl/pycurl/examples/retriever.py?content-type=text%2Fplain). Grab не умеет на данный момент скачивать в файл, но если оперативы на сервере много - это не проблема. Если такую фичу допиливать, то нужно принимать ряд важных конструктивных решений, которые лучше делать автору.
Постить файлы pycurl тоже умеет (это которые post-запросы с multipart) и через имя файла который curl сам будет открывать и читать, и через собсна контент который можно передать напрямую curl. И content-type даже передаст и boundary сам придумает. Оба способа умеет grab. Тут уже показывали как.
А если речь шла про put-запросы, то тут вообще сложностей нет.
Я думаю, важно понимать, что протокол http полностью реализован библиотекой curl - она очень старая, проверенная и надежная. Кроме того, еще и быстрая. И если есть какая-то задача, то найдется решение как её выполнить с помощью curl. Важно понимать как работает http-протокол и как пользоваться curl.



Офлайн

#7 Июнь 30, 2012 19:16:19

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Grab тред

alexey-grom
и через собсна контент который можно передать напрямую curl. И content-type даже передаст и boundary сам придумает. Оба способа умеет grab. Тут уже показывали как.
Интересно, не напомнишь?

alexey-grom
Grab не умеет на данный момент скачивать в файл, но если оперативы на сервере много - это не проблема.
Это напрямую зависит от того, что качать. А если файл на пару гиг?

PUT где-то вообще работает и применяется?

Решение с курлом теоретически может и возможно, да вот никто мне его показать не может. + как я уже написал, все ли опции curl доступны в pycurl?

Офлайн

#8 Июль 1, 2012 04:45:08

alexey-grom
От: Новосибирск
Зарегистрирован: 2012-03-09
Сообщения: 14
Репутация: +  3  -
Профиль   Отправить e-mail  

Grab тред

odnochlen
Это напрямую зависит от того, что качать. А если файл на пару гиг?
Тогда лучше получать список url и качать более подходящим средством, например wget. И это всё простейшим скриптом с блэкджеком и шлюхами.

odnochlen
PUT где-то вообще работает и применяется?
В основном конечно get и post, но пичалька была если бы put понадобился, а его нет, потому что кто-то думает что плевать на полноценность реализации протокола в клиенте.

odnochlen
Решение с курлом теоретически может и возможно, да вот никто мне его показать не может. + как я уже написал, все ли опции curl доступны в pycurl?
А вы бы повежлевее общались с людьми, может кто и показал бы ^_^
c = pycurl.Curl()
c.setopt(c.URL, base_url + 'upload.cgi')
c.setopt(c.HTTPPOST,[ ("fieldname1", "value1"), 
                      ("fieldname2", "value2"), 
                      ("uploadfieldname", 
                                 (c.FORM_FILE, local_filename, 
                                  c.FORM_CONTENTTYPE, "application/x-gzip"))
                    ])
Как скачивать в файл уже в прошлом посте писал.

А к вопросу все ли опции доступны в pycurl, то думаю, там вероятно конвертер какой-то используется который *.h сишной либы с константами преобразует в *.py, когда биндинг готовят. Что-то такое скорее всего.
В принципе, тут важно понимать, что API очень простое у curl и целиком построено на использовании пары функций и передачи им параметров в виде указателей и констант. Так что даже если когда то и встретиться какая-то экзотика которой нет в биндинге, её даже допиливать не нужно - просто посмотреть код нужного параметра в доках и вызвать setopt, к примеру.



Офлайн

#9 Июль 1, 2012 04:59:51

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Grab тред

alexey-grom
Тогда лучше получать список url и качать более подходящим средством, например wget. И это всё простейшим скриптом с блэкджеком и шлюхами.
Но зачем?

alexey-grom
А вы бы повежлевее общались с людьми, может кто и показал бы ^_^
Мне это не нужно, это уже есть в грабе. Мне нужен пост файла из памяти.
А еще pycurl в имени файла не берет юникод.

alexey-grom
А к вопросу все ли опции доступны в pycurl, то думаю, там вероятно конвертер какой-то используется который *.h сишной либы с константами преобразует в *.py, когда биндинг готовят. Что-то такое скорее всего.
В принципе, тут важно понимать, что API очень простое у curl и целиком построено на использовании пары функций и передачи им параметров в виде указателей и констант. Так что даже если когда то и встретиться какая-то экзотика которой нет в биндинге, её даже допиливать не нужно - просто посмотреть код нужного параметра в доках и вызвать setopt, к примеру.
Отлично. Тыц. Скажешь мне, как там настроить передачу функции чтения файла через pycurl? Где в pycurl аналог этого?

Отредактировано odnochlen (Июль 1, 2012 05:01:03)

Офлайн

#10 Июль 1, 2012 05:35:50

alexey-grom
От: Новосибирск
Зарегистрирован: 2012-03-09
Сообщения: 14
Репутация: +  3  -
Профиль   Отправить e-mail  

Grab тред

odnochlen
Мне это не нужно, это уже есть в грабе. Мне нужен пост файла из памяти.
Ну и в чем проблема? Вместо c.FORM_FILE, нужно использовать c.FORM_CONTENTS. В граб это тоже есть: https://bitbucket.org/lorien/grab/src/953299d16194/grab/upload.py

odnochlen
А еще pycurl в имени файла не берет юникод.
Вам уже говорили что нужно конвертировать в однобайтовую кодировку.

odnochlen
Но зачем?
хз зачем, поднимался такой вопрос - я его осветил :)

odnochlen
Скажешь мне, как там настроить передачу функции чтения файла через pycurl?
Блеать, какой еще функции чтения файла? Чтобы стримить поток или что? Зачем вообще такой странный подход? Есть _правильный_ способ постить файлы (в том числе большие) при котором всем занимается сам curl.
Мне не очень понятно желание постить файл из памяти. Тут взаимоисключающие параграфы. Или дропните данные во временный файл и постите через FORM_FILE или постите через c.FORM_CONTENTS. Ничего не мешает установить дополнительно FORM_FILENAME в обоих случаях.

odnochlen
Где в pycurl аналог этого?
Вы либо не пытаетесь разобраться, либо мозги ебете :D
Это в pycurl заменяет это:
c.setopt(c.HTTPPOST,[ ("fieldname1", "value1"), ("uploadfieldname", (c.FORM_FILE, local_filename, c.FORM_CONTENTTYPE, "application/x-gzip", и дальше так же остальные нужные параметры)), (и для других полей) ])
Простой список кортежей такого вида: (имя поля, (параметр1, значение1, параметр2, значение2, …) ) где параметры это options отсюда



Отредактировано alexey-grom (Июль 1, 2012 05:37:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version