2012-02-23 86 views
3

我正在使用wget/curl在Linux上运行测试。我可以运行wget,但我不能用curl做同样的事情。使用Linux的wget .vs 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/etc ..但wget是一个直的“得到”,所以它应该在curl作为一个直接得到。用户代理设置为相同...

任何指针都会有帮助。

+1

尝试使用URL的单引号,或者跳过其中的双引号......或者是一个错字? – Dmitri 2012-02-23 08:18:47

+0

ps ..已经尝试过使用单引号围绕网址,以及双引号..和逃避内部双引号在url ..没有区别 – 2012-02-23 08:23:35

+0

curl默认情况下不会处理http重定向,而wget做的。也许最初的url会返回重定向到正确的内容?在这种情况下,wget会得到它,但不卷曲(除非你使用-L选项) – jap1968 2012-02-23 08:48:20

回答

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上获取数据。还要注意从双引号到单引号的更改,以防止表单数据中的双引号引起问题。