2016-02-09 7 views
-2

Я - бэкенд-разработчик в моей нынешней компании. Когда у команды front-end есть проблема, они иногда будут использовать функцию «запрос на копирование» Chrome devtool как функцию завивки и отправить мне проблемный запрос на завивание. Я думал, что было бы здорово, если бы я мог написать сценарий, чтобы преобразовать эти завитки по-разному - удаление, добавление или изменение параметров, между прочим.curl command to python dict

Первый шаг здесь, я думаю, будет разбирать команду во что-то более удобное для работы. Я думал об использовании чего-то вроде click или docopt, но не видел легкой команды, чтобы сделать command line string ->intelligent python object или что-то в этом роде. В идеале это будет работать не только в этом случае, но и для любой действующей команды Unix. Есть ли lib, который может сделать это легко? Или мне нужно расширить одну из этих библиотек? Или мне лучше просто написать что-то с нуля?

Пример завитка Я пытаюсь разобрать:

локон http://myhost?myarg=ACTIVE&myotherarg=1 -H Pragma: нет кэша -H Происхождение: http://localhost:5000 -H Accept-Encoding: GZIP, выкачать, SDCH -H Accept-язык: en-US, en; q = 0.8 -H Разрешение: токен xxxxxxxx1234567 -H Accept: application/json, text/javascript, /; q = 0.01 -H Cache-Control: no-cache -H User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/48.0.2564.103 Safari/537.36 -H соединения: держать-жив -h Referer: http://localhost:5000/projects/7/overview-all/active/ --compressed

+1

Вы могли бы хотеть рассмотреть написание питона адаптации к этому: https://shibukawa.github.io/curl_as_dsl/, который является общим завиток-команда -line-to-language-X-конвертер с поддержкой многих других языков. –

+0

Это круто. Спасибо за ссылку. –

ответ

0

Оказывается, модуль python shlex может выполнять большую часть тяжелого подъема.

Я написал код для обработки моего конкретного использования: https://github.com/JesseAldridge/chrome_to_local_curl

0

единственный способ это может работать в общем случае, если все команды Unix (или, по крайней мере, подмножество вы работаете с) имел последовательный перевод между их аргументами и аналогами Python на любые аргументы. Это маловероятно.

Для Curl конкретно, флаги не так уж плохо: Попробуйте использовать библиотеку Python argparse (tutorial here) написать простой парсер, который улавливает помимо самой команды и проверяя requests библиотеку, чтобы установить формат словаря, который соответствовал бы до его обычных аргументов ключевого слова.

+0

Похоже, что с argparse (как и с другими подобными lib) вам нужно вручную сообщить системе, что аргументы опережают время (например, parser.add_argument ('- H', ...)). Не совсем то, что я ищу. Я ищу что-то, использующее эвристику, чтобы определить, что это за аргументы, путем проверки командной строки. Несовершенные результаты в порядке. –

+0

Правильно, я понимаю, я просто не понимаю, как это возможно. Инструменты командной строки принимают произвольные аргументы, флаги и т. Д. В различных комбинациях и конфигурациях, основанных на собственных требованиях и предпочтениях их авторов; вы могли бы просто преобразовать команду в словарь, но насколько она может делать что-либо полезное без вмешательства человека, согласованности там нет. – kungphu