by lostfire
最近一直試圖用httpClient做點自動化的工作
,不過現在看來并沒有想象中的那么輕松。
實際上登錄一個網站,訪問某個特點的頁面,發表一篇文章
,上傳一些文件,并不是一個簡單的事情。
HttpClient的基本使用因為發布的代碼中帶有幾個例子,應該算是不難掌握的事情。下面我說下我遇到的幾個問題。
1,登陸驗證圖片問題
首先登錄的時候網站如果不想你對它編程的化通常都會設計一個驗證圖片,這個技術現在已經如此的易于使用,以至于隨便到哪里都能找到代碼來直接使用。對于驗證圖片的,現在還苦于無計可施狀態。
2,笨蛋Cookie問題:
如果你要發送多個cookie,其實可以這樣發的:

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),
????????});
但是截包就會發現,httpclient會在header里構件多個cookie項,每一項只含有一個cookie,這同IE是不一樣的。IE和Firefox會把所有的cookie打包成一個,然后在這個cookie里按照分號把每一項隔開,中間有個空格。
所以如果用httpclient,還想讓cookie正常的話,請使用下面這種形式:
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,編碼問題:
httpClient處理編碼并不像IE或FireFox那么智能,httpclient記不住上次會話的編碼,這樣如果默認不是ISO-8859-1的話,那都要在Content-Type里邊指定,其實指定的方法也很簡單。
本來要提交的是form,默認按照application/x-www-form-urlencoded來發送,在IE里邊發送的話截包可以看到,報文中也就指定了這樣一個Content-Type,但是人家IE已經把報文的內容按照會話的編碼轉換好了。而httpclient不行,它并不知道怎么轉化,那么你沒有設定轉換的charset的話,它就按照Charset=ISO-8859-1轉換了。這一點上Httpclient應該再改進一下,因為記住server發過來的頁面編碼是件很簡單的事情。只要將類似于"Content-Type: text/html; charset=utf-8"這樣的頭保存一下狀態就可以了。
為了彌補httpclient這一點的傻瓜表現,我們只好每次都手工設置一下嘍:
postMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
4,上傳文件問題:
?
posted on 2006-06-15 00:12
rd2pm 閱讀(9586)
評論(12) 編輯 收藏 所屬分類:
http tool