循环curl获取请求bash

循环curl获取请求bash

我正在尝试自动化卷曲脚本并最终使其也循环。我发现我无法使用任何循环,例如:

for i in `cat authors`
do
    curl *line here*   "www.test.com/autors?string="$i"&proc=39"
etc

甚至是 CURL 的 env glob 变量

有没有一种方法可以在curl上循环获取一个变量的请求?

curl -H "Host: www.test.com" -G "www.test.com/autors?string="author+name"&proc=39"

我得到的只是 CURL 的流量图,没有好的结果。我正在使用 bash

答案1

尝试这个构造:

 while read author; do
      curl "http://www.test.com/authors?string=$author&proc=39"
 done < authors

这将为您节省麻烦,不必在反引号中执行操作等。如果您愿意,它还允许您从输入文件中读取几列,但是像我的示例中那样只指定一个要获取的变量将获得整个线。

答案2

作者包含诸如空格之类的名字,我猜是点

发生了几件事:

首先,您执行for循环的方式根本不起作用。尝试这个:

 for i in `cat authors`
 do
    echo "Author = \"$i\""
 done

看看发生了什么?每个空格分隔 的一个值$i。如果您有名字和姓氏,您将得到一行仅包含名字的行和一行仅包含姓氏的行。

现在试试这个:

cat authors | while read i
do
    echo "Author = \"$i\""
done

好一些?现在,$i是你的整条线。 (是的,我知道“无用的猫”,但看看我要去哪里!)

其次,您可能必须将这些空格和句点转换为有效的 URL 字符。空格必须转换成%20.让我们采取不同的方法:

 sed 's/ /%20/g' authors | while read test
do
    echo "curl *line here* www.test.com/authors?string=$i&proc=39"
done

(现在,你明白为什么我有这个了cat。)

这应该打印出你的curl命令。我正在做的就是获取authors文件并将空格转换为字符串%20。现在,我可以去掉字符串周围的引号,这也会引起问题。

因此,我们现在可以摆脱回显,并运行实际的 CURL 命令:

 sed 's/ /%20/g' authors | while read test
do
    curl *line here* www.test.com/authors?string=$i&proc=39
done

现在做什么*line here*代表?这是你的选择清单吗?哦,你有作者代替作者在你的程序中。您是否在这里输入错误,或者您的程序应该是这样的?

相关内容