В рамках проекта HTTPie (https://github.com/jkbr/httpie/) предпринята попытка создания упрощённого аналога утилиты curl, ориентированного на отправку запросов с использованием API web-сервисов. В отличие от curl, HTTPie изначально ориентирован на использование JSON и поддерживает подсветку синтаксиса, что позволяет увеличить наглядность вывода результатов обращения к различным API. Код утилиты написан на языке Python с использованием модулей Requests (http://python-requests.org) и Pygments (http://pygments.org/). Исходные тексты распространяются под лицензией BSD.
Запрос формируется без нагромождения опциями в виде "http метод URL параметры". Поддерживается разбор параметров в формате JSON и автоматическая сериализация в JSON параметров, заданных в виде списка. Если в качестве разделителя параметров используется двоеточие, считается, что это HTTP-заголовок, если символ "=" - строковый параметр запроса, ":=" - числовой параметр.
Например, после выполнения:
<font color="#461b7e">
http PATCH api.example.com/person/1 X-API-Token:123 name=John email=john@example.org age:=29</font>
будет выполнен запрос:
<font color="#461b7e">
PATCH /person/1 HTTP/1.1
User-Agent: HTTPie/0.1
X-API-Token: 123
Content-Type: application/json; charset=utf-8{"name": "John", "email": "john@example.org", "age": 29}
</font>если дополнительно указать опцию "-f" то вместо "application/json" будет использован тип "application/x-www-form-urlencoded" и в итоге получим:
<font color="#461b7e">
PATCH /person/1 HTTP/1.1
User-Agent: HTTPie/0.1
X-API-Token: 123
Content-Type: application/x-www-form-urlencoded; charset=utf-8age=29&name=John&email=john%40example.org
</font>
<center><img src="http://www.opennet.me/opennews/pics_base/0_1331376290.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></center>URL: https://github.com/jkbr/httpie/
Новость: http://www.opennet.me/opennews/art.shtml?num=33314
curl - стандарт,
а он должен быть один
> curl - стандарт,правда чтоль? xD
ды даже не существует libcurl-привязки для Python3 xD ... настолько это "стандарт"
Проблемы негров никого не волнуют
> Проблемы негров никого не волнуютони конешно не волнуют [кто спорит?]... но факт отсутствия привязки к популярному интерпретатору -- говорит о том что curl (libcurl) не такой уж и "стандарт"
Скорее, дело в том что популярность питона 3 сильно преувеличена. И вообще задолбали уже делать несовместимые версии питонов. Когда попадается скрипт на питоне - ему еще и питона надо подбирать. Прикиньте так работал бы какой-нибудь баш или си? Вот круто было бы! :)
> Когда попадается скрипт на питоне - ему еще и питона надо подбиратьну вот скачали вы скрипт, установили зависимости (из файла README), затем делаете:
$ chmod +x ./my-script
$ ./my-scriptв чём тут разница между Python и Bash (или C или perl) или прочего?
> $ chmod +x ./my-script
> $ ./my-script
> в чём тут разница между Python и Bash (или C или perl)
> или прочего?В том, что некоторые вполне себе python-скрипты работают только в конкретной версии Python, в отличие от. И иногда достаточно непросто угадать, какого же "пистона" ему, собаке, надо, опять таки в отличие от.
ну зайдите же на сайт автора этого python-скрипта и скачайте последнюю версию этого скрипта..что за проблемы. такое можно написать про любую программу, не зависимо от ЯП
(речь о программе, в которой автор допустил ошибку, которая начала вдруг проявляться в следущией версии компилятора/интерпретатора... что вы в этом случае делаете? правильно, обновляете кривую программу до той версии в которой ошибка уже исправлена!)
если программа была написана на GCC, то возможно она начала вылетать в segfault, на новой версии GCC, потомучто в ней ИЗНАЧАЛЬНО была ошибка непроявляемая при старой оптимизации старой версии GCC... но здесь-то вы уже почемуто не напишете про несовместимость GCC, верно? почему(?)(?)(?).. ды потомучто "несовместимость тут не причём"(?).. тыг в 99.9% в python-скрипте тоже несовместимость не причём, а всеголишь причина в какойто ранее-не-уловимой ошибке в этом python-скрипте.
# p.s.: про авторов которые пишут bash-скрипты, через Ж -- я уже вобще молчу. bash это очень ~необычный~ ЯП, но некотоыре недопрограммисты-администраторы щитают будтобы он очень лёгкий, и шпарят там по over-9000-ошибок на ровном месте... стоит только поставить в имени файла лишний пробел (или начать имя файла с минуса) и сразу такой говно-bash-скрипт начинает впадать в дессананс. а вот в Python таких ~ламерских~ ошибок допустить ну на порядок сложнее!
Ох, как же достали эти придурки с синдромом гусёнка. Выучат какую-нить одну хрень и защищают ее к месту и не к месту, как святыни. Ну еще бы, кроме нее они ничего не знают, а не стань ее, дак они останутся бесполезны
> Ох, как же достали эти придурки с синдромом гусёнка. Выучат какую-нить одну
> хрень и защищают ее к месту и не к месту, как
> святыни. Ну еще бы, кроме нее они ничего не знают, а
> не стань ее, дак они останутся бесполезнына самом деле -- эти люди выучили много чего и другого... но просто у них отсутстует синдром чрезмерного увеличения ЧСВ от того они <осилили-некую-сложную-штуку>.
усложнить чтото -- может любой дурак. а вот как тоже самое сделать более просто -- тут уже нужна смекалка.
ничего страшного что щаз это может казаться неявным.... когда повзраслеешь -- поймёшь что сложность программы [и количество исходного кода] это МИНУС программы а не её ПЛЮС
> bash это очень ~необычный~ ЯПорли? а можно узнать, чем?
p.s. вопрос риторический, лучше промолчи.
>> bash это очень ~необычный~ ЯП
> орли? а можно узнать, чем?отвечу примером.
следущий кусок кода -- удалённо (SSH) переименовывает файл:
OLD_NAME="$1"
NEW_NAME="$2"quote () { echo \'${1//\'/\'\\\'\'}\'; }
ssh my-user@my-server "mv -- $(quote "$OLD_NAME") $(quote "$NEW_NAME")"так вот ~необычность~ заключается в том что при таком огромном количество значочков -- некоторые недопрограммисты-администраторы попросту НЕ хотят их все ставить
(ленятся? или просто не знают, что если они не поставят чтото, то допустят ошибку? ошибку, которая сразу возможно не проявит себя)
так вот если не поставить чтото -- то BASH скорее всего не выдаст ошибку, а просто создаст BUG в скрипте
а ведь я написал *всеголишь**только* парочку строчек на BASH! а скрипт может быть намного большего размера!!! а теперь представили сколько там делают ошибок?
вот в этом и ~необычность~...
Ну да. Bash не Java, все возможные эксепшны отлавливать не завставляет. И да, во отличие от питона при падении скрипта стектрейсы не выдает. Но как-бы это и не было его главной целью.
Покажите теперь питоноскрипт, выполняющий ту-же задачу, со всеми возможными проверками. Чтобы было с чем сравнивать.
> ну зайдите же на сайт автора этого python-скрипта и скачайте последнюю версию этого скрипта..Зайдите пожалуйста на http://natribu.org и внимательно прочитайте. Осознайте написанное. Это единственное что хочется сказать таким как вы, когда древний сорец на сях из лохматого 1988 года собирается текущим компилером и не бухтит, баянные шеллскрипты времен царя гороха просто запускаются и работают, etc. А питоновский скрипт которому и пяти лет нету являет собой полный гемор в плане запуска.
Понимаете, это _вам_ с вашим питоном головного мозга надо постоянно перекачивать, ставить 5 версий интерпретера и заниматься прочим анонизмом. А _мне_ это не надо, потому что для меня в отличие от вас питон не является краеугольным камнем. Более того, с таким отношением к совместимости у меня появляется причина вообще не закладываться на это поделие, потому что я ну совсем не хочу чтобы через 5 лет у меня ни 1 скрипт не запускался без диких танцев с бубнами или переписки половины кода. Только потому что дятлы пишущие это решили что видите ли старые версии были отстоем, а вот новые зато будут зашибись. И вот так - пять раз подряд?!
> Понимаете, это _вам_ с вашим питоном головного мозга надо постоянно перекачивать, ставить 5 версий интерпретера и заниматься прочим анонизмом.у _нас_ всё работает
а с Вашими бинарными программами [утилитами прикладного уровня] и сиплюсплюс-головного-мозга -- нада постоянно ловить segfault и утечки памяти на ровном месте
..и чо? в чём разница? (плохих программистов можно найти на любом языке программирования)
да, я согласин что segfault случаются очень редко [если вовремя обновлять систему и софт, то и вообще почти не случаются!].... но несостыковка версий python-програм -- ТОЖЕ случается _крайне_ редко....
...где вы там что подбираете? что за сказки 10-летней давности вы там морозите?
> когда древний сорец на сях из лохматого 1988 года собирается текущим компилером и не бухтит
ой заврАлись-то как! :D
самим не смешно??? давай скомпилируй следущее:
#include <conio.h>
void main()
{
// ...
clrscr();
// ...
}что? хочется сказать стандартное выражение "нужно внесни незначительные изменения в исходный код"? то и дело постоянно слышу эту фразу...
> самим не смешно??? давай скомпилируй следущее:
> #include <conio.h>
> void main()
> {
> <i> …
> clrscr();
> </i> …
> }
> что? хочется сказать стандартное выражение "нужно внесни незначительные изменения в исходный
> код"? то и дело постоянно слышу эту фразу…а вот это вообще феерически. притащить нестандартное досовое гуано и вякать. деточка, google://posix. прикинь, пример LZSS-компрессора был написан более 20 лет назад, а до сих пор собирается. и работает.
впрочем, фанбоям гвидобейсика не понять, что такое «стандарт» и как так может быть, что 20 лет прошло — а софт всё ещё собирается. ведь в Самом Лучшем Языке так не бывает — а, значит, такого вообще не может быть нигде и никогда.
> а вот это вообще феерически. притащить нестандартное досовое гуано и вякать. деточка, google://posix. прикинь, пример LZSS-компрессора был написан более 20 лет назад, а до сих пор собирается. и работает.ой что это было? ненравится мой пример? видители я привёл черезжопный пример кода?
...ну извините, но вы ВООБЩЕ никакого примера кода python-скрипта не привели который якобы работает только на определённой версии/подверсии python, изза мифически-легендарных python-несовместимойтей :-D
сначало приведите пример python-кода, а уже потом я вам расскажу о том что думаю по поводу квалификации того кто был автоором этого кусочка примера кpython-кода
всё ещё более запущено: ты, вдобавок, неспособен отслеживать нить дискусии, если в ней принимают участие более двух оппонентов.однако так и быть, я задам тебе лёгкий вопрос: где почитать стандарты на гвидобейсик? хотя бы уровня ansi c и posix? ну, если ты вообще понимаешь, что это и зачем надо. где мне почитать, как надо писать программы на гвидобейсике, чтобы через 20 лет они взяли и запустились?
> ты, вдобавок, неспособен отслеживать нить дискусиину это возможно...
...всё потомучто ваши троллинговые комментарии там постоянно подчищаются... становится несовсем понятно кто пишет и в какой ните :-D
> где почитать стандарты на гвидобейсик?
docs.python.org (уровень организации PSF (The Python Software Foundation) -- вам подходит?? иль слишком маленький?)
> хотя бы уровня ansi c и posix?
ANSI-организация не занимается Пайтоном
а POSIX -- это вообще стандарт на операционную систему. НЕ для прикладных программ, извените спасибопожалуйста. :-)
но если уж затронули POSIX -- то сдаётся мне что вы вообще мега-теоретиг(!), если думаете что этот стандарт покрывает написание хоть-сколько-то полезной прикладной программы.. :D
как только захотите сделать чтото полезное на POSIX C [чуть-сложнее чем Hello World] -- то мгновенно поймёте что уже головой задеваете потолок POSIX, и без специализированных kernel-функций (или/и без библиотечных функций GNU-окружения) -- особо то и не обойтись
элементарный вопрос который застанет вас в расплох -- это -- как будете реализовывать обработку событий в своей "полезной" программе? epoll()? но epoll() не входит в POSIX! libevent? а может быть ваша прикладная программа вообще будет работать не на основе событейной модели? "отличное" решение! :-D
а может хотите сделать многонитевую программу? но ведь POSIX даже ничего не знает про передачу сигналов нитям (по POSIX передавать сигналы можно только процессу, тобишь только главной ните процесса)... "многоже" полезного можно сделать опираясь на этот замечательный стандарт POSIX? :-)
>если программа была написана на GCCлицорука.жпг
>[оверквотинг удален]
> ЯП
> (речь о программе, в которой автор допустил ошибку, которая начала вдруг проявляться
> в следущией версии компилятора/интерпретатора... что вы в этом случае делаете? правильно,
> обновляете кривую программу до той версии в которой ошибка уже исправлена!)
> если программа была написана на GCC, то возможно она начала вылетать в
> segfault, на новой версии GCC, потомучто в ней ИЗНАЧАЛЬНО была ошибка
> непроявляемая при старой оптимизации старой версии GCC... но здесь-то вы уже
> почемуто не напишете про несовместимость GCC, верно? почему(?)(?)(?).. ды потомучто "несовместимость
> тут не причём"(?).. тыг в 99.9% в python-скрипте тоже несовместимость не
> причём, а всеголишь причина в какойто ранее-не-уловимой ошибке в этом python-скрипте.Ну причем здесь "ошибка в python-скрипте", если между python 2.x и 3.x большие изменения. Часть функций удалены, заменены или интегрированы в другие. Где-то синтаксис другой по сравнению с 2.x. Т.е. как бы скрипт работает в 2.x, а в 3.x интерпретатор вылетает с ошибкой.
>> но факт отсутствия привязки к популярному интерпретатору«популярный интерпретатор» это g++
ВСЕ ПРОЧЕЕ — ПРЯМО ЛЕСОМ И С РАЗБЕГУ :) :) :) :) :) :) :) :) :) :) :) :) :) :)
>ды даже не существует libcurl-привязки для Python3 xD ... настолько это "стандарт"Какой конкретно из них привязки нет под 3-й питон?:
http://pypi.python.org/pypi?%3Aaction=search&term=curl&...
лучше напиши вот так: "я попробовал <такуюто> libcurl-привязку к Python3, и она работает"потомучто тот pypi-список который по твоей ссылке -- весьма отличается от списка http://pypi.python.org/pypi?:action=browse&c=533&show=all
> лучше напиши вот так: "я попробовал <такуюто> libcurl-привязку к Python3, и она
> работает"
> потомучто тот pypi-список который по твоей ссылке -- весьма отличается от списка
> http://pypi.python.org/pypi?:action=browse&c=533&show=allвишь ли теоретеГ, питон поставляется вместе со стандартной библиотекой и в каждой версии, то есть в любой даже самой урезанной версии python есть urllib , которая является ничем иным как биндингом к curl. Ваш К.О.
> которая является ничем иным как биндингом к curlа судя по её исходникам -- связи с cURL там даже близко нет...
...зато чистая (pure python) реализация на sockets -- вполне там виднеется :-)
# p.s.: сдаётся мне что Вы совсем не К.О.,
а просто <некто> кому постоянно мерещется везде libcurl, библиотека которая как я уже выше писал НЕ ЯВЛЯЕСЯ СТАНДАРТОМ
как бы это ни было неприятно для поклонников гвидобейсика, их язык не является Мерилом Всего.
верно... это просто популярный интерпретатор
популярный != хороший, вон пример есть такой, php называется
Недавно произошла смена ABI с 3 на 4, все программы стало нужно пересобрать. Так что он уже не один, а уже несколько несовместимых между собой версий Curl.
А у питона вообще несовместимых версий штуки 4 или 5 наверное. И каждый раз надо ломать бошку какая же версия вон той поделке нужна. С curl как-то проще все в этом плане.
> А у питона вообще несовместимых версий штуки 4 или 5 наверное.Ага целая вторая и третья. У любого языка таких несовместимостей вагон и маленькая тележка.
> Ага целая вторая и третья.Агащаз, в рамкой второй версии бидоны тоже частично несовместимы между собой, по поводу чего в пингвинах сроду таскают по 3 версии этой байды. Форменное уродство.
> У любого языка таких несовместимостей вагон и маленькая тележка.ты лжец. или будь любезен доказать оправданность квантора общности в данном случае.
Не то, что бы стандарт. Тем более, что пришлось его патчить. Но более удобного HTTP-клиента мне пока не попадалось.
> ко-ко-ко-ко-коВидимо ты пользуешься им раз в году. А вот когда каждый день приходится писать кучу ненужного бойлерплейта -- иной раз задумаешься об удобстве.
не проще ли было бы просто добавить эту функциональность в сам curl?
> Код утилиты написан на языке Python"Они обнаружили в curl фатальный недостаток". Правда вот у их поделки будет в три раза больше фатальных недостатков по причине несовместимости разных версий их интерпретера, увы и ах :)
>> Код утилиты написан на языке Python
> "Они обнаружили в curl фатальный недостаток". Правда вот у их поделки будет
> в три раза больше фатальных недостатков по причине несовместимости разных версий
> их интерпретера, увы и ах :)Расскажи каких?
> Расскажи каких?Чего - каких? В 2.х версии 2.4, 2.5, 2.6 и 2.7 совместимы между собой далеко не на 100% по поводу чего большинство дистров таскает порядка 3 версий этой дряни, дабы избегать обломов в своих скриптах. Скрипты скачанные откуда-то сбоку - это вообще 100% лотерея. Ну и как будто бы этого было мало, версия 3 будет еще более несовместима с остальными. Волшебно!
>> Расскажи каких?
> Чего - каких? В 2.х версии 2.4, 2.5, 2.6 и 2.7 совместимы
> между собой далеко не на 100% по поводу чего большинство дистров
> таскает порядка 3 версий этой дряниНу то есть "теоретиГ" . И реальной несовместимости ты показать не можешь, потому как обратная совместимость есть.
> потому как обратная совместимость есть.Агащаз. Если б все было так радужно как вы тут вещаете, дистры пингвина не таскали бы по 3 версии бидона. А поскольку переписывать все скрипты им дико впадлу, им проще припереть соотв. версии интерпретеров. Но если там это утрясается майнтайнерами, то вот когда я беру скрипт где-то сбоку - подбор "расово верной" версии бидона уже становится моей проблемой. А оно мне надо?!
> вот когда я беру скрипт где-то сбоку - подбор "расово верной" версии бидона уже становится моей проблемойну давай же скорее свой говноскрипт в студию! обсудим несовместимости :-D :-D :-D :-D
> Если б все было так радужно как вы тут вещаете, дистры пингвина не таскали бы по 3 версии бидона.мой дистрибутив [довольно-популярного] "пингвина" тоскает с собой:
"gcc-4.4" , "gcc-4.5" , "gcc-4.6"
(виртуальный пакет "gcc" указывает на "gcc-4.6" ... также как и в случае с виртуальным пакетом "python".. никаких отличий)
>>> Расскажи каких?
>> Чего - каких? В 2.х версии 2.4, 2.5, 2.6 и 2.7 совместимы
>> между собой далеко не на 100% по поводу чего большинство дистров
>> таскает порядка 3 версий этой дряни
> Ну то есть "теоретиГ" . И реальной несовместимости ты показать не можешь,
> потому как обратная совместимость есть.есть несовместимост, ты врешь, сам ловил пару раз - с 2.4 на 2.5 (сообщение было: "бла бла но интерфейс этого вызова изменился"), лень искать те скрипты, так как винт уже два раза менял, но пару раз обжечься мне хватило, теперь лучше перл или руби возьму для скриптинга, а то и вообще шелл.
и вообще меня печалит продукт, где в ченджлоге не секции "incompatibility" - http://www.python.org/getit/releases/2.5/NEWS.txt, хотя я их точно ловил
Неужели curl настолько тяжеловесный, что ему нужен "упрощённый аналог"??? Если под питон нет реализации curl, то почему не запилить полноценный аналог (и, если уж так хочется, добавить к нему свои свистелки)?
Ага. Бинарь курлы весит аж целых 120 кило! Огромная прога. А у питона один только интерпретер потребный для запуска весит ~2.5 метра, это без учета скрипта и либ потребных для его старта... oO
> Неужели curl настолько тяжеловесный, что ему нужен "упрощённый аналог"??? Если под питон
> нет реализации curl, то почему не запилить полноценный аналог (и, если
> уж так хочется, добавить к нему свои свистелки)?Новость читал? Что такое json представляешь? Так вот люди написали утилиту которая работает как curl только для json.
> работает как curl только для json.Во первых не понятно почему надо ограничиваться "только json". Во вторых еще менее понятно зачем это писать на питоне, который уже откровенно достал своими несовместимостями между версиями. Наверное чтобы через год-другой, когда питонистам попадет шлея под хвост выкатить очередную несовместимую версию, все как обычно перестало бы работать, потому что старые версии были плохими, а вот новая - хорошая. И так раз в 1-2 года, ать-ать-ать.
>> работает как curl только для json.
> Во первых не понятно почему надо ограничиваться "только json". Во вторых еще
> менее понятно зачем это писать на питоне, который уже откровенно достал
> своими несовместимостями между версиями. Наверное чтобы через год-другой, когда питонистам
> попадет шлея под хвост выкатить очередную несовместимую версию, все как обычно
> перестало бы работать, потому что старые версии были плохими, а вот
> новая - хорошая. И так раз в 1-2 года, ать-ать-ать.Анонимы задрали со своей несовместимостью. Нет никакой несовместимости.
> Анонимы задрали со своей несовместимостью. Нет никакой несовместимости.Да не напрягайтесь вы так, всем давно известно что свое - не пахнет. Питонисты просто эталонная иллюстрация. Вот только таскание по 3 версии питона 2.х в дистрах линукса этот тезис опровергает наповал. Было б все так как вы вещаете - таскали бы одну, последнюю. А вот и фигЪ, таскают по 3 версии, тудыть-растудыть.
>> Анонимы задрали со своей несовместимостью. Нет никакой несовместимости.
> Да не напрягайтесь вы так, всем давно известно что свое - не
> пахнет. Питонисты просто эталонная иллюстрация. Вот только таскание по 3 версии
> питона 2.х в дистрах линукса этот тезис опровергает наповал. Было б
> все так как вы вещаете - таскали бы одну, последнюю. А
> вот и фигЪ, таскают по 3 версии, тудыть-растудыть.БОХТЫМОЙ! набрал
$ aptitude search gcc
и там тоже оказывается что в дистрибутиве хренова туча разных версий GCC :-D :-Dсвоё гавно не пахнит, да...
> Питонисты просто эталонная иллюстрация.
да нееее, всё подругому думаю было... просто вы скачали гдето както какойто python-скриптный-WeReZ, написанный на скорую руку, а он не запустился.. и вы тут расписываете про некий мифический конфликт совместимостей.
Установленное в системе по умолчанию от того что есть в репозитории отличать умеете?
> Установленное в системе по умолчанию от того что есть в репозитории отличать
> умеете?а как оно туда попало в репозиторий?
программа -- это творческий процесс, а не "факт двоичных последовательностей".. подумай об этом
это проблемы дистров. в нормальных только 2.7.2-r3 из второй ветки.
И назвали её http.ЛОГЕКА
не просто HTTP, но http_IE_! сразу понятно о чем речь...
Питоночерепаха курлу не конкурент.
верно, не конкурент... у них разные ролиcURL -- это уневерсальная и громоздкая (с точки зрения использования) вещь.
а HTTPie -- это лёгкая (с точки зрения использования) и узкоспециализированная
ну хорош чушь морозить, curl - это всего-навсего консольная утилитка, интерфейс к очень годной и мощной библиотеке libcurl, и в вашем любимом питоне должны быть биндинги (я гарантирую это) к это либе.
И если вы разработчик (а не очередной фанат питона), то вы с с легкостью можете сваять подобную поделку за полдня работы, если оно,конечно, вам действительно нужно.