by lostfire
最近一直試圖用httpClient做點(diǎn)自動(dòng)化的工作
,不過(guò)現(xiàn)在看來(lái)并沒(méi)有想象中的那么輕松。
實(shí)際上登錄一個(gè)網(wǎng)站,訪問(wèn)某個(gè)特點(diǎn)的頁(yè)面,發(fā)表一篇文章
,上傳一些文件,并不是一個(gè)簡(jiǎn)單的事情。
HttpClient的基本使用因?yàn)榘l(fā)布的代碼中帶有幾個(gè)例子,應(yīng)該算是不難掌握的事情。下面我說(shuō)下我遇到的幾個(gè)問(wèn)題。
1,登陸驗(yàn)證圖片問(wèn)題
首先登錄的時(shí)候網(wǎng)站如果不想你對(duì)它編程的化通常都會(huì)設(shè)計(jì)一個(gè)驗(yàn)證圖片,這個(gè)技術(shù)現(xiàn)在已經(jīng)如此的易于使用,以至于隨便到哪里都能找到代碼來(lái)直接使用。對(duì)于驗(yàn)證圖片的,現(xiàn)在還苦于無(wú)計(jì)可施狀態(tài)。
2,笨蛋Cookie問(wèn)題:
如果你要發(fā)送多個(gè)cookie,其實(shí)可以這樣發(fā)的:

state.addCookies?(new?Cookie[]
{
????????????new?Cookie("?www.aaa.com","popped","yes","/",new?Date(2006,12,8),false),?
????????????new?Cookie("?www.aaa.com","rtime","2","/",new?Date(2006,12,8),false),?
????????????new?Cookie("?www.aaa.com","ltime","1149940477953","/",new?Date(2006,12,8),false),?
????????????new?Cookie("?www.aaa.com?","cnzz02","1","/",new?Date(2006,12,8),false),
????????});
但是截包就會(huì)發(fā)現(xiàn),httpclient會(huì)在header里構(gòu)件多個(gè)cookie項(xiàng),每一項(xiàng)只含有一個(gè)cookie,這同IE是不一樣的。IE和Firefox會(huì)把所有的cookie打包成一個(gè),然后在這個(gè)cookie里按照分號(hào)把每一項(xiàng)隔開,中間有個(gè)空格。
所以如果用httpclient,還想讓cookie正常的話,請(qǐng)使用下面這種形式:
String?cookies?=?"yes;?rtime=2;?ltime=1149940477953;?cnzz02=1";?
state.addCookie(new?Cookie("blog.aaa.com","poped",cookies,"/",new?Date(2006,12,8),false));?
3,編碼問(wèn)題:
httpClient處理編碼并不像IE或FireFox那么智能,httpclient記不住上次會(huì)話的編碼,這樣如果默認(rèn)不是ISO-8859-1的話,那都要在Content-Type里邊指定,其實(shí)指定的方法也很簡(jiǎn)單。
本來(lái)要提交的是form,默認(rèn)按照application/x-www-form-urlencoded來(lái)發(fā)送,在IE里邊發(fā)送的話截包可以看到,報(bào)文中也就指定了這樣一個(gè)Content-Type,但是人家IE已經(jīng)把報(bào)文的內(nèi)容按照會(huì)話的編碼轉(zhuǎn)換好了。而httpclient不行,它并不知道怎么轉(zhuǎn)化,那么你沒(méi)有設(shè)定轉(zhuǎn)換的charset的話,它就按照Charset=ISO-8859-1轉(zhuǎn)換了。這一點(diǎn)上Httpclient應(yīng)該再改進(jìn)一下,因?yàn)橛涀erver發(fā)過(guò)來(lái)的頁(yè)面編碼是件很簡(jiǎn)單的事情。只要將類似于"Content-Type: text/html; charset=utf-8"這樣的頭保存一下狀態(tài)就可以了。
為了彌補(bǔ)httpclient這一點(diǎn)的傻瓜表現(xiàn),我們只好每次都手工設(shè)置一下嘍:
postMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
4,上傳文件問(wèn)題:
?
posted on 2006-06-15 00:12
rd2pm 閱讀(9589)
評(píng)論(12) 編輯 收藏 所屬分類:
http tool