读取列表并将它们添加到不同域的 curl

Read a list and add them to curl with different domains

我有一个 URL 列表,我想按顺序测试其中的一些 header。例如,我有以下 headers:

X-Forwarded-For:
X-Forwarded-Host:

还有以下网址:

https://example.com/
https://target.com/
https://redacted.com/

我想将第一个 header X-Forwarded-For: 添加到 curl 并 运行 按顺序覆盖所有 URL,然后添加第二个 header X-Forwarded-Host:卷曲和 运行 卷曲 URL 等等。

curl --silent -I --max-time 10 --url https://example.com/ -H "X-Forwarded-For: myserver.com"
curl --silent -I --max-time 10 --url https://target.com/ -H "X-Forwarded-For: myserver.com"
curl --silent -I --max-time 10 --url https://redacted.com/ -H "X-Forwarded-For: myserver.com"

curl --silent -I --max-time 10 --url https://example.com/ -H "X-Forwarded-Host: myserver.com"
curl --silent -I --max-time 10 --url https://target.com/ -H "X-Forwarded-Host: myserver.com"
curl --silent -I --max-time 10 --url https://redacted.com/ -H "X-Forwarded-Host: myserver.com"

我写了下面的代码:

function myfunc {

    if [[ -f "allurls.txt" ]]; then

        headers_list=("X-Forwarded-For: "
                    "X-Forwarded-Host: "
                    )

        for headers in $(cat "allurls.txt"); do

            for curlme in ${headers_list[@]}; do
                (
                curl --silent -I --max-time 10 --url "$headers" -H "$curlme myserver.com"
                )
            done

        done
    fi
}
myfunc

我的代码的问题是它像这样执行 curl:

curl --silent -I --max-time 10 --url https://example.com/ -H "X-Forwarded-For: myserver.com"
curl --silent -I --max-time 10 --url https://example.com/ -H "X-Forwarded-Host: myserver.com"

curl --silent -I --max-time 10 --url https://target.com/ -H "X-Forwarded-For: myserver.com"
curl --silent -I --max-time 10 --url https://target.com/ -H "X-Forwarded-Host: myserver.com"

curl --silent -I --max-time 10 --url https://redacted.com/ -H "X-Forwarded-For: myserver.com"
curl --silent -I --max-time 10 --url https://redacted.com/ -H "X-Forwarded-Host: myserver.com"

交换 for 循环,使内循环成为外循环,反之亦然

...
        # swap these 2 lines
        for curlme in ${headers_list[@]}; do

            for headers in $(cat "allurls.txt"); do
...

PS:我相信变量名称混合了,这可能更具可读性和您所期望的

...
        # swap these 2 lines
        for header in ${headers_list[@]}; do

            for curlme in $(cat "allurls.txt"); do
                curl --silent -I --max-time 10 --url "$curlme" -H "$header myserver.com"
...

添加一个更自然的 *nix 脚本
又称亲动

...
            # it's common to use while-read loops with files
            while read curlme; do
                curl --silent -I --max-time 10 --url "$curlme" -H "$header myserver.com"
            done < allurls.txt
...