如何运行多个curl请求,按顺序处理?

Ric*_*rdo 15 curl request

假设我是一名大型unix新秀, - 我每15分钟通过cron运行一次卷曲请求. - Curl基本上用于加载给出一些参数的网页(php),作为脚本,如:

curl http://mysite.com/?update_=1

我想要实现的是使用这种curl技术运行另一个"脚本" - 每次运行另一个脚本 - 在运行另一个脚本之前

我已经读过curl在一个命令中接受多个url,但我不确定这是否会按顺序或"并行"处理ulrs.

Tim*_*dge 39

它很可能会顺序处理它们(为什么不测试它).但你也可以这样做:

1)创建一个名为curlrequests.sh的文件2)将它放在一个文件中,如下所示:

curl http://mysite.com/?update_=1
curl http://mysite.com/?update_=3
curl http://mysite.com/?update_=234
curl http://mysite.com/?update_=65
Run Code Online (Sandbox Code Playgroud)

3)保存文件并使用chmod使其可执行:

chmod +x curlrequests.sh
Run Code Online (Sandbox Code Playgroud)

4)运行你的文件:

./curlrequests.sh
Run Code Online (Sandbox Code Playgroud)

要么

/path/to/file/curlrequests.sh
Run Code Online (Sandbox Code Playgroud)

作为旁注,您可以使用&&链接请求,如下所示:

curl http://mysite.com/?update_=1 && curl http://mysite.com/?update_=2 && curl http://mysite.com/?update_=3
Run Code Online (Sandbox Code Playgroud)

并使用&并行执行:

curl http://mysite.com/?update_=1 & curl http://mysite.com/?update_=2 & curl http://mysite.com/?update_=3
Run Code Online (Sandbox Code Playgroud)


小智 20

这里没有提到的另一个关键方法是对多个 HTTP 请求使用相同的 TCP 连接,并且为此使用一个curl 命令。

这对于节省网络带宽、客户端和服务器资源以及总体上使用多个curl命令的需要非常有用,因为curl默认情况下会在到达命令结束时关闭连接。

对于运行 Web 应用程序的标准客户端来说,保持连接打开并重用它是很常见的。

从curl版本7.36.0开始,--next或者-:命令行选项允许链接多个请求,并且可以在命令行和脚本中使用。

例如:

  • 在同一个 TCP 连接上发送多个请求:

curl http://example.com/?update_=1 -: http://example.com/foo

  • 在同一连接上发送多个不同的 HTTP 请求:

curl http://example.com/?update_=1 -: -d "I am posting this string" http://example.com/?update_=2

  • 发送多个 HTTP 请求,每个请求具有不同的 curl 选项:

curl -o 'my_output_file' http://example.com/?update_=1 -: -d "my_data" -s -m 10 http://example.com/foo -: -o /dev/null http://example.com/random

来自卷曲手册页

-:, - 下一个

告诉curl 对以下URL 和关联选项使用单独的操作。这允许您发送多个 URL 请求,每个请求都有自己的特定选项,例如每个请求的不同用户名或自定义请求。

-:--next将重置所有本地选项,只有全局选项的值会保留到 -:, --next 指令之后的操作中。全局选项包括 -v、--verbose、--trace、--trace-ascii 和 --fail-early。

例如,您可以在单个命令行中执行 GET 和 POST:

卷曲 www1.example.com --next -d 发布此 www2.example.com

7.36.0 中添加。


Pie*_*erz 19

根据curl 手册页

您可以在命令行上指定任意数量的 URL。它们将按指定的顺序按顺序获取。

因此,最简单和最有效的(curl 会将它们全部发送到单个 TCP 连接 [那些来自同一来源的])方法是将它们全部放在 curl 的单个调用上,例如:

curl http://example.com/?update_=1 http://example.com/?update_=2
Run Code Online (Sandbox Code Playgroud)


Meh*_*ian 8

我迟到了 13 年,但与这里的所有其他答案相比,我有一些新的东西要补充。

我发现您的网址末尾有一个数字。我最近遇到了同样的问题,该数字是从 0 到 13 的连续数字。以下是我如何用一行解决该问题的方法:

curl http://example.com/?update_=[0-13]
Run Code Online (Sandbox Code Playgroud)

例如,如果您只想要偶数,则可以指定跳转:

curl http://example.com/?update_=[0-13:2]
Run Code Online (Sandbox Code Playgroud)

以下是curl 手册页的逐字记录:

URL 语法与协议相关。您可以在 RFC 3986 中找到详细说明。

您可以通过在大括号内编写部分集并引用 URL 来指定多个 URL 或 URL 的一部分,如下所示:

"http://site.{one,two,three}.com"

或者您可以使用 [] 获取字母数字系列的序列,如下所示:

"ftp://ftp.example.com/file[1-100].txt"

"ftp://ftp.example.com/file[001-100].txt" (带前导零)

"ftp://ftp.example.com/file[a-z].txt"

不支持嵌套序列,但您可以相邻使用多个序列:

"http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html"