使用Linux时,wget和curl有什么区别?

3
我正在Linux上使用wget/curl进行测试。我可以运行wget,但是无法使用curl做同样的事情。
wget版本:
 wget -v -O osu.tst  -U 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4'  'http://ohiostate.bncollege.com/webapp/wcs/stores/servlet/TBListView?catalogId=10001&storeId=33552&termMapping=N&courseXml=<?xml version="1.0" encoding="UTF-8"?><textbookorder><courses><course dept="CHEM" num="100" sect="16030" term="S12" /></courses></textbookorder> '

curl 版本:

curl -v -b fftfcook -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4" -L  "http://ohiostate.bncollege.com/webapp/wcs/stores/servlet/TBListView?catalogId=10001&storeId=33552&termMapping=N&courseXml=<?xml version="1.0" encoding="UTF-8"?><textbookorder><courses><course dept="CHEM" num="100" sect="16030" term="S12" /></courses></textbookorder>"

“curl”返回页面的部分内容,而“wget”获取浏览器生成的内容。我已经尝试修改cookies等,但是“wget”是一个直接的“get”,所以它应该在“curl”中也可以作为一个直接的“get”工作。用户代理设置成了相同的...任何指针都会有帮助。

1
尝试在URL周围使用单引号,或在其中转义双引号...还是打错字了? - Dmitri
已经尝试在URL周围使用单引号和双引号,以及转义URL中的内部双引号,但没有任何区别。 - tom smith
curl默认情况下不处理HTTP重定向,而wget则可以。也许原始URL返回到正确内容的重定向?在这种情况下,wget将获取它,但curl不会(除非您使用-L选项)。 - jap1968
1个回答

3
问题似乎是GET数据没有进行URL编码。只有少量字符可以出现在URL或GET数据中而不需要进行编码,虽然当输入到浏览器的地址栏时,浏览器通常会为您处理这些情况。
不要将GET数据附加到URL的末尾,而是对每个值使用-d--data-urlencode选项,并传递-G选项以将其视为GET数据。因此,您最终会得到以下内容:
curl -v -b fftfcook -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4" -L  'http://ohiostate.bncollege.com/webapp/wcs/stores/servlet/TBListView' -G -d 'catalogId=10001' -d 'storeId=33552' -d 'termMapping=N' --data-urlencode 'courseXml=<?xml version="1.0" encoding="UTF-8"?><textbookorder><courses><course dept="CHEM" num="100" sect="16030" term="S12" /></courses></textbookorder>'

各种-d--data-urlencode选项将合并在一起,组成URL上的GET数据。请注意,将双引号更改为单引号,以防止表单数据中的双引号引起问题。

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