Автоматизация скрипта curl с внешними переменными из текстового файла

#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