为什么从firefox发出的curl命令不能下载任何内容?


8

https://raw.githubusercontent.com/andreafrancia/trash-cli/master/README.rst在Firefox中打开,然后从“工具”->“ Web开发者”->“网络”复制以下curl命令:

curl 'https://raw.githubusercontent.com/andreafrancia/trash-cli/master/README.rst' -H 'Host: raw.githubusercontent.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-GB,en;q=0.5' --compressed -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'If-None-Match: "6931c3b4d0e94743bb93a36ed8e8c3f5add12f9a"' -H 'Cache-Control: max-age=0' 

当我在lxterminal中运行它时,即使我添加-O了它,它也不会下载任何内容。我想知道为什么它不下载,以及如何使它下载文件?

谢谢。


2
您应该知道,从Firefox获得的curl命令可能包含会话cookie,并且可以用来模拟您。无论如何,这是安全的,因为github cookie与资产服务器分离了。
朱尔斯·拉莫尔

谢谢。我想知道“模拟”和“ github cookie与资产服务器分离”的含义是什么。
蒂姆(Tim)

1
我的意思是,如果您向某人发送curl命令,那么他们可以像使用您一样使用您的会话(例如github帐户)。
朱尔斯·拉莫尔

2
不将命令的内容发送给任何人(或编辑命令中的cookie)。
朱尔斯·拉莫尔

1
@Tim Cookies标头,但就像Jules Lamur所说的那样,如果GitHub不需要您的raw.githubusercontent.com会话,那么您的示例就不会受到攻击。无论如何,这不一定仅限于其他网站的Cookie。他们可能选择对敏感信息使用其他标头。
JoL

Answers:


26

在调试curl问题时,该-v选项通常很有帮助。在此特定实例中,您运行的是If-None-Match标头,它告诉服务器您已经具有与“ 6931c3b4d0e94743bb93a36ed8e8c3f5add12f9a”匹配的文件,并且您不希望再次获取它,如果它没有更改。-v通过指示服务器响应为304标头来向您显示此信息:

< HTTP/1.1 304 Not Modified

要下载文件,请删除标题:

curl 'https://raw.githubusercontent.com/andreafrancia/trash-cli/master/README.rst' -H 'Host: raw.githubusercontent.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-GB,en;q=0.5' --compressed -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'Cache-Control: max-age=0'

在这种情况下,您将获得与

curl 'https://raw.githubusercontent.com/andreafrancia/trash-cli/master/README.rst'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.