#bash #http #curl
#bash #http #curl
Вопрос:
Итак, у меня есть скрипт, расположенный по адресу
"http://somrething.com?source=<var1>amp;target=<var2>"
Который принимает два параметра (var1 amp; var2), оба из которых находятся в текстовом файле / Excel.
var1 | var2
ab cd
ef gh
. .
. .
Допустим, в приведенной выше таблице n записей, и я хочу выполнить свой скрипт curl n раз таким образом, чтобы он получал записи, заполнял запрос и выполнял. Как я должен это сделать?
В настоящее время я использую python
скрипт для выполнения этого запроса curl в виде команды bash внутри цикла после чтения текстового файла и перехода к элементам таблицы один за другим.
Что-то вроде этого-
combined_vars = list(zip(var1, var2))
for var1, var2 in combined_vars:
bashCommand = "curl 'http://somrething.com?source=" var1 "amp;target=" var2 "'"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
Этот скрипт, в свою очередь, выполняется с помощью скрипта bash, поскольку мне нужно автоматизировать весь этот процесс с помощью crontab.
Это кажется довольно неэффективным, и мне было интересно, есть ли альтернативный способ сделать это.
Комментарии:
1. @oguzismail готово!
2. Действительно ли этот пример является выдержкой из вашего текстового файла / excel? И в чем смысл этой команды curl? Он просто печатает исходный код.
3. Отредактировано еще раз, чтобы включить точную копию того, что я делал до сих пор. @oguzismail
4. @oguzismail 1, это всего лишь пример. 2, в фоновом режиме есть скрипт, который должен внести некоторые изменения в базу данных после проверки двух переданных параметров.
5. В качестве дополнительного примечания
bashCommand.split()
действительно подвержен сбоям (он будет разделен пробелами без учета кавычек), вам, вероятно, лучше создать[ "curl", url]
массив самостоятельно
Ответ №1:
Предположим, что ваши поля не могут содержать разделитель полей (который, как предполагается ниже, является ,
), достаточно использовать цикл while / read :
while IFS=',' read var1 var2; do
curl "http://somrething.com?source=$var1amp;target=$var2"
done < input.csv