在使用xargs之后获取Curl头信息

3
我正在运行以下命令:
xargs -n 1 -t <"/myfilewithURLs" curl -v -uuser:password -H'"'Header1: value1'"' -H'"'Accept: application/json'"' -H'"'Header 3: value3'"' {}
我得到的输出命令是:
curl -v -user:password -H"Header 1: value 1" -H"Accept: application/json" -H"Header 3: value 3" https://mycorrectURL
当我将此命令复制并粘贴到控制台中时,我可以得到输出结果,但是当我运行完整的xargs命令时,我会得到以下错误信息:
* Rebuilt URL to: value 1"/
curl显然会失败,因为我不想将标题作为URL。删除花括号没有任何效果。
我认为这可能与引用有关,因为它似乎无法识别-H为标题,并将其添加为命令的一部分,但我找不到任何诊断它的资源。有人能帮忙吗?
2个回答

3

我认为你的'"'游戏是导致URL混乱的原因。
尝试:

cat urls.txt | xargs -n 1 curl -u user:password -H "Header1: value1" -H "Accept: application/json" -H "Header 3: value3"

在这里您不必使用{},因为xargs会将URL放在curl命令的末尾。

另外,curl可以同时处理多个URL,所以您可以省略-n 1,如果URL来自同一域,则可能受益于持久连接。


0

你可能还想在 xargs 之后、curl 之前添加 -I {}。似乎有一些关于 curl 的“魔法”行为,导致 xargs 将事物传递给它作为 --url 而不是默认行为 {} 被替换。使用 -I 显式地替换令牌是最好的选择。

正如其他答案提到的,如果您不希望变量被扩展,请在标题字符串周围使用单引号;如果您希望它们被扩展,请使用双引号。如果您想要数据中的字面 ',以避免破坏扩展,可以像这样转义它们:-H "Data:\'Yay literally\'"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接