全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3908
推到 Plurk!
推到 Facebook!

用idhttp的post抓html資料有時成功,有時卻不成功

尚未結案
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-14 20:30:06 IP:220.133.xxx.xxx 訂閱
我想要抓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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-24 00:44:52 IP:219.68.xxx.xxx 訂閱
我想你只是參數沒有轉成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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-24 01:08:43 IP:219.68.xxx.xxx 訂閱

本來以為是參數的問題,不過後來仔細測了一下,如果一直連續執行此命令確實會發生你所說的錯誤,原因我還要查查source


我想抓這種網頁應該一段時間只會做一次,總不會一秒按個兩三次,我發現這段程式碼多數會成功,偶爾會失敗,測試時間在凌晨,如果平時常常會失敗應該是server那邊太忙了也不一定
寫個回圈失敗後再重做,做到成功應該就行了,(因為我試過如果某次失敗,一直連續重按,仍然可能會成功),應該暫時能解決抓取這個網頁資料的問題
編輯記錄
washare 重新編輯於 2009-03-24 01:20:28, 註解 無‧
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-21 16:19:44 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-03-29 16:07:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!