2013-02-21 2 views
2

Мне нужно отправить настройку расширения для проверки при запуске паука. Это действительно очень легко, когда я использую локон:Преобразование запроса на отправку, выполняемого curl на запрос python на основе модуля запросов

http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1 

Но когда я хотел подключить это питона скрипт на основе запросов модуля, я был немного смущен о настройке = DOWNLOAD_DELAY = 2, так как он не следуйте обычной форме (key = value). Так что я попытался это:

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting=DOWNLOAD_DELAY': '2'}) 

Но не оказывает никакого влияния на поведение обычного Scrapy в.

Заранее спасибо.

ответ

3

Обычно в парах ключ-значение, переданных в командной строке, вы сначала делят на =, а не на второй. Итак, сделайте следующее:

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting': 'DOWNLOAD_DELAY=2'}) 

Например, в документации GNU для Program Argument Syntax Conventions:

Длинные опции состоят из «-» следует имя из буквенно-цифровых символов и тире. Названия опций обычно от одного до трех слов, с дефисами для разделения слов. Пользователи могут сокращать имена опций, пока аббревиатуры уникальны.

Чтобы указать аргумент для длинной опции, напишите '--name = value'. Этот синтаксис позволяет длинной опции принимать аргумент, который сам по себе необязателен.

Другими словами, в --foo=bar=baz, foo является name и bar=baz является value, потому что = не алфавитно-цифровой символ или тире.

Аналогично, curl обрабатывает опцию -d foo=bar=baz с foo как name и bar=baz в качестве значения.

Вы не можете прямо сделать вывод, что из любой спецификации, вы даже не можете прямо заключить, что curl следует за синтаксисом аргументов GNU вообще, поскольку он не является программой GNU, и (IIRC) выполняет собственный собственный аргумент разбор. Итак, вам нужно будет прочитать the source, чтобы быть абсолютно уверенным.

Или, проще говоря, протестируйте его. Захватите запрошенный формой запрос, который отправляет curl. (Если вы не знаете, как сделать это:. Попробуйте выполнить поддельный сервер с netcat, например, nc -kl 8888 в системе/BSD Mac, а затем curl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1, и посмотреть, что появляется в командной строке)

Но такое поведение в значительной степени является неявным стандартом, когда у вас есть пары name=value.

Смежные вопросы