用idhttp的post抓html資料有時成功,有時卻不成功 |
尚未結案
|
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
我想要抓http://rate.bot.com.tw/Pages/UIP005/UIP005INQ2.aspx?lang=zh-TW這個網頁呈交後的資料,但是寫在thread裡,偶爾成功,時常會出現 HTTP/1.1 500 Internal server error 錯誤訊息,不知道是為什麼,會偶爾成功就覺得很怪。
以下是我的程式碼: [code delphi] var ms : TMemoryStream; idh : Tidhttp; web_url : string; begin web_url := http://rate.bot.com.tw/Pages/UIP005/UIP005INQ2.aspx?lang=zh-TW; ms := TMemoryStream.Create; idh := TIdhttp.create(nil); idh.HandleRedirects:= TRUE; idh.RedirectMaximum := 1; idh.ConnectTimeout := 10000; idh.ReadTimeout := 10000; idh.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)'; postlist := TStringList.Create; postlist.Add('__VIEWSTATE=/wEPDwUKLTkxNDEyNjQxMWQYAQUJbXVsdGlUYWJzDw9kZmST27/sH2tp0yY6vXqgZslIwsy3gA=='); postlist.Add('__EVENTVALIDATION=/wEWBgKcurY Ao6SgIILAvGQ5ooOAp/kvpsNAoznisYGArursYYIw42bockl4o4htmnktA0yWT1HFBM='); postlist.Add('term=0'); postlist.Add('year=2009'); postlist.Add('month=1'); idh.post(web_url,postlist, ms); . . . //...都後都free掉 end; [/code] 貼一下要該網頁的呈交內容 POST /Pages/UIP005/UIP005INQ2.aspx?lang=zh-TW HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml xml, application/x-silverlight-2-b2, application/x-silverlight, */* UA-CPU: x86 Accept-Encoding: gzip, deflate Referer: http://rate.bot.com.tw/Pages/UIP005/UIP005INQ2.aspx?lang=zh-TW Accept-Language: zh-tw Content-Type: application/x-www-form-urlencoded request cookies BankOfTaiwanCookie: 352626880.20480.0000 query string lang: zh-TW 編輯記錄
17kobe 重新編輯於 2009-01-14 20:53:36, 註解 無‧
|
washare
初階會員 發表:14 回覆:36 積分:35 註冊:2006-10-17 發送簡訊給我 |
我想你只是參數沒有轉成utf8
請試試 function StrToUtf8(const Str: string): UTF8String; begin Result := Utf8Encode(Str); end; procedure TForm1.Button3Click(Sender: TObject); var idh : Tidhttp; web_url : string; postlist : TStringList; s:string; begin web_url := 'http://rate.bot.com.tw/Pages/UIP005/UIP005INQ2.aspx?lang=zh-TW'; idh := TIdhttp.create(nil); idh.HandleRedirects:= TRUE; idh.RedirectMaximum := 1; idh.ReadTimeout := 10000; idh.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)'; postlist := TStringList.Create; postlist.Add(StrToUtf8('__VIEWSTATE=/wEPDwUKLTkxNDEyNjQxMWQYAQUJbXVsdGlUYWJzDw9kZmST27/sH2tp0yY6vXqgZslIwsy3gA==')); postlist.Add(StrToUtf8('term=6')); postlist.Add(StrToUtf8('year=2009')); postlist.Add(StrToUtf8('month=3')); // postlist.Add(StrToUtf8('Button1=查詢')); postlist.Add(StrToUtf8('__EVENTVALIDATION=/wEWBgKcurY Ao6SgIILAvGQ5ooOAp/kvpsNAoznisYGArursYYIw42bockl4o4htmnktA0yWT1HFBM=')); { postlist.Add('__VIEWSTATE=/wEPDwUKLTkxNDEyNjQxMWQYAQUJbXVsdGlUYWJzDw9kZmST27/sH2tp0yY6vXqgZslIwsy3gA=='); postlist.Add('__EVENTVALIDATION=/wEWBgKcurY Ao6SgIILAvGQ5ooOAp/kvpsNAoznisYGArursYYIw42bockl4o4htmnktA0yWT1HFBM='); postlist.Add('term=0'); postlist.Add('year=2009'); postlist.Add('month=1'); } s:=idh.post(web_url,postlist); memo1.Lines.Text:=s; memo1.Lines.Add('完成'); idh.Free; //...都後都free掉 end;
編輯記錄
washare 重新編輯於 2009-03-24 01:07:49, 註解 無‧
|
washare
初階會員 發表:14 回覆:36 積分:35 註冊:2006-10-17 發送簡訊給我 |
本來以為是參數的問題,不過後來仔細測了一下,如果一直連續執行此命令確實會發生你所說的錯誤,原因我還要查查source 我想抓這種網頁應該一段時間只會做一次,總不會一秒按個兩三次,我發現這段程式碼多數會成功,偶爾會失敗,測試時間在凌晨,如果平時常常會失敗應該是server那邊太忙了也不一定 寫個回圈失敗後再重做,做到成功應該就行了,(因為我試過如果某次失敗,一直連續重按,仍然可能會成功),應該暫時能解決抓取這個網頁資料的問題
編輯記錄
washare 重新編輯於 2009-03-24 01:20:28, 註解 無‧
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |