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

50pmv0ei  于 2023-10-19  发布在  其他
关注(0)|答案(8)|浏览(210)

假设我是一个Unix新手:

  • 我每15分钟通过cron运行一个curl请求。
  • Curl基本上是用来加载一个网页(PHP),给定一些参数,就像一个脚本一样:
curl http://example.com/?update_=1

我想实现的是使用这种curl技术运行另一个“脚本”,

  • 每次运行其他脚本时
  • 在运行其他脚本之前

我读到curl在一个命令中接受多个URL,但我不确定这是否会顺序或“并行”处理URL。

elcex8rz

elcex8rz1#

它很可能会按顺序处理它们(为什么不直接测试它)。但你也可以这样做:
1.创建一个名为curlrequests.sh的文件
1.把它放在一个像这样的文件中:

curl http://example.com/?update_=1
curl http://example.com/?update_=3
curl http://example.com/?update_=234
curl http://example.com/?update_=65

1.保存文件,并使其可执行与chmod

chmod +x curlrequests.sh

1.运行您的文件:

./curlrequests.sh

/path/to/file/curlrequests.sh

顺便说一下,您可以使用&&链接请求,如下所示:

curl http://example.com/?update_=1 && curl http://example.com/?update_=2 && curl http://example.com?update_=3`

并使用&并行执行:

curl http://example.com/?update_=1 & curl http://example.com/?update_=2 & curl http://example.com/?update_=3
tcbh2hod

tcbh2hod2#

根据curl man page
您可以在命令行上指定任意数量的URL。它们将按照指定的顺序依次获取。
因此,最简单和最有效的(curl将把它们都发送到一个单一的TCP连接[那些到同一个源])方法将把它们都放在一个curl调用上,例如:

curl http://example.com/?update_=1 http://example.com/?update_=2
htzpubme

htzpubme3#

这里没有提到的另一个关键方法是使用同一个TCP连接用于多个HTTP请求,并且只使用一个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 manpage

-:,--next

告诉curl对以下URL和相关选项使用单独的操作。这允许您发送多个URL请求,每个URL请求都有自己的特定选项,例如,不同的用户名或自定义请求。
-:--next将重置所有本地选项,只有全局选项的值将保留到-:,--next指令之后的操作。全局选项包括-v、--verbose、--trace、--trace-asktop和--fail-early。
例如,您可以在一个命令行中执行GET和POST:
curl www1.example.com--next -d postthis www2.example.com
在7.36.0中添加。

mbzjlibv

mbzjlibv4#

我迟到了13年,但与这里的所有其他答案相比,我有一些新的东西要补充。
我发现你在URL的末尾有一个号码。我最近遇到了同样的问题,这个数字是从0到13的连续数字。以下是我如何在一行中解决它:

curl http://example.com/?update_=[0-13]

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

curl http://example.com/?update_=[0-13:2]

以下是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"

ndh0cuux

ndh0cuux5#

我认为这使用了更多的本地功能

//printing the links to a file
$ echo "https://stackoverflow.com/questions/3110444/
https://stackoverflow.com/questions/8445445/
https://stackoverflow.com/questions/4875446/" > links_file.txt

$ xargs curl < links_file.txt
anauzrmj

anauzrmj6#

按照所需的顺序编写一个包含两个curl请求的脚本,并通过cron运行它,如

#!/bin/bash
curl http://mysite.com/?update_=1
curl http://mysite.com/?the_other_thing
n53p2ov0

n53p2ov07#

这将做你想要的,使用一个输入文件,是超级快

#!/bin/bash
IFS=$'\n'
file=/path/to/input.txt
lines=$(cat ${file})
for line in ${lines}; do
   curl "${line}"
done
IFS=""
exit ${?}

输入文件中每行一个条目,它将遵循输入文件的顺序
保存为whatever.sh并使其可执行

ws51t4hk

ws51t4hk8#

也可以使用括号{}
假设你想 curl :
a. wildfly_jdbc_total
B. wildfly_jdbc_currently

curl http://127.0.0.1:9990/metrics/vendor/wildfly_datasources_jdbc_{total,currently}

相关问题