我只想从curl请求中获取标头
curl -I www.google.com
一切都很棒。现在我想这样做,但也传递发布数据:
curl -I -d'test=test' www.google.com
但我得到的只是:
Warning: You can only select one HTTP request!
有人知道如何做到这一点还是我在做一些愚蠢的事情?
-I
选项告诉curl执行HEAD请求,而-d'test=test'
选项告诉curl执行POST,所以你告诉curl执行两种不同的请求类型。
curl -s -d'test=test' -D- -o/dev/null www.google.com
或者,在 Windows 上:
curl -s -d'test=test' -D- -onul: www.google.com
据我所知,这是最巧妙的方法。 选项有:
-D-
将标头转储到列出的文件,或在传递 -
时转储到标准输出,如下所示。-o/dev/null
将正文发送到列出的文件。 在这里,我们丢弃正文,因此我们只能看到标题。-s
静音(无进度条)-d
表示您正在通过 POST
方法发送表单数据。 -I
表示您只是通过 HEAD
查看元数据。
我建议其中之一
/dev/null
并通过 -D headerfile
将标题写入文件 headerfile
-i
在答案中包含标题并跳过第一个空行中的所有内容。当我将响应头保存为shell变量时,结果很糟糕,是什么原因?
''' 值=$(curl -k -s -X get www.google.com -D- -s -o/dev/null) 回显$值
value=$(curl -k -s -X get www.google.com -D- -s -o/dev/null | xargs echo) 回显$值
value=$(curl -k -s -X get www.google.com -D- -s -o/dev/null >curl.tmp;catcurl.tmp) 回显$值 '''
以上所有结果都是格式错误的,这只是整个结果的一部分。
直接使用commond,结果是正确的,如: 卷曲 -k -s -X 获取 www.google.com -D- -s -o/dev/null
问题已解决,但我认为这个结果与操作系统无关,因为任何其他命令都可以正常工作。 https://github.com/curl/curl/issues/13961