在萬一老師的博客看到一種利用IXMLHTTPRequest來獲取網頁源碼的方法,但有2個問題沒解決,自己研究了下改進了方法。
1.如果網頁進行301轉跳將無法獲取源碼
2.如果網站是gb2312編碼將獲取的是亂碼
/////以下方法使用的是Delphi xe2編寫
uses MsXML,activex;
function GETHTML (const URL : string):string; // XMLHTTP接口
Var
XMLHTTP:IServerXMLHTTPRequest;
HTML:TBytes;
begin
try
CoInitializeEx(nil,COINIT_MULTITHREADED);
XMLHTTP:=CoServerXMLHTTP.Create; //使用CoServerXMLHTTP則能進行301轉跳,CoXMLHTTP不能轉跳
XMLHTTP.open('GET',URL,False,EmptyParam,EmptyParam);
XMLHTTP.send(EmptyParam);
HTML:=XMLHTTP.responseBody;
//判斷網頁是否攜帶utf-8,沒攜帶進行轉換
if Pos('utf-8',StringOf(HTML)) > 0 then begin
Result:=TEncoding.Default.GetEncoding(65001).GetString(HTML);//把UTF8轉STRING
Exit;
end;
Result:=TEncoding.Default.GetString(HTML);
finally
CoUnInitialize; // 釋放內存
end;
end;