Найти - Пользователи
Полная версия: Grab тред
Начало » Network » Grab тред
1 2 3 4
odnochlen
lorien
Т.е. вы считаете, что я вас козлом обозвал и продолжаете общаться? У вас, видимо, склонность к мазохизму.
Нет, я не думаю, что Вам это было ясно. Вы просто чюрка.

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

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

То есть, фичи Вы по предложению юзеров не добавляете, а только встраиваете их код?
odnochlen
Ну почему не светит, одного претендента на черенкование уже нашел.
odnochlen
Нет, искал я другое, просто тут наткнулся на одного. Я не любитель, но если уж такое чудо выползло, грех отказаться. Оно ж не успокоится, пока ему очко не почешут.
alexey-grom
К слову об “у..бищном” pycurl: есть pylibcurl, питоник, очень приятный в использовании, читабельный etc, но на тестах на 30% медленнее pycurl.
Вопрос производительности транспорта запросов актуален и терять эту производительность ради того чтобы зависимости были питоник - глупость. Будто без этого узких мест мало.
А pycurl в полне адекватен сишной природе curl, если вы понимаете о чем я… ^_^
odnochlen
alexey-grom
К слову об “у..бищном” pycurl: есть pylibcurl, питоник, очень приятный в использовании, читабельный etc, но на тестах на 30% медленнее pycurl.
Что значит медленнее? Больше проц грузит? Я сомневаюсь, что где-то что-то упрется именно в транспорт, а не парсер. Или качает медленнее?

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

Если pylibcurl такой питонический, странно, что я про него не слышал. Люди до того доходили, что юзали голый pycurl.
alexey-grom
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.
odnochlen
alexey-grom
и через собсна контент который можно передать напрямую curl. И content-type даже передаст и boundary сам придумает. Оба способа умеет grab. Тут уже показывали как.
Интересно, не напомнишь?

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

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

Решение с курлом теоретически может и возможно, да вот никто мне его показать не может. + как я уже написал, все ли опции curl доступны в pycurl?
alexey-grom
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, к примеру.
odnochlen
alexey-grom
Тогда лучше получать список url и качать более подходящим средством, например wget. И это всё простейшим скриптом с блэкджеком и шлюхами.
Но зачем?

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

alexey-grom
А к вопросу все ли опции доступны в pycurl, то думаю, там вероятно конвертер какой-то используется который *.h сишной либы с константами преобразует в *.py, когда биндинг готовят. Что-то такое скорее всего.
В принципе, тут важно понимать, что API очень простое у curl и целиком построено на использовании пары функций и передачи им параметров в виде указателей и констант. Так что даже если когда то и встретиться какая-то экзотика которой нет в биндинге, её даже допиливать не нужно - просто посмотреть код нужного параметра в доках и вызвать setopt, к примеру.
Отлично. Тыц. Скажешь мне, как там настроить передачу функции чтения файла через pycurl? Где в pycurl аналог этого?
alexey-grom
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 отсюда
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB