因工作需要,需要抓取.cgi網頁中的內容,不知如何抓取.忘那位大俠指點.謝謝!
解决方案 »
- 程序爱好者的耐心?
- DBComboBox+Table+DataSource出错问题》?
- 求助:哪位前辈有高程考试的资料,请给小弟传点,小弟在这里谢过了:)
- 急`~!!! 在线等候 关于 BDE 数据插入 功能 各位 高人 请指点 小弟在此不胜感激!!~~
- 一个小问题 就是看不明白了!
- 请问winexec函数?
- 坐标的单位长度怎么变化
- WideString的用法
- 哪儿有Delphi5.0下载,我有急用
- delphi7中TClientDataSet的Locate问题
- 求救,WebBrowser组件 能设置 http 的 referer 吗?
- dbgrid或dbgrideh的单元格onchange 以及百万条数据查询速度问题
牛比一点的做法,使用WinInet API函数
TIdHttp 看看 Indy 的例子
procedure THTTPGetThread.Execute;
var
hSession, hConnect, hRequest: hInternet;
HostName, FileName: String;
f: File;
Buf: Pointer;
dwBufLen, dwIndex: DWord;
Data: Array[0..$400] of Char;
TempStr: String;
RequestMethod: PChar;
InternetFlag: DWord;
AcceptType: LPStr; procedure ParseURL(URL: String; var HostName, FileName: String); procedure ReplaceChar(c1, c2: Char; var St: String);
var
p: Integer;
begin
while True do
begin
p := Pos(c1, St);
if p = 0 then Break
else St[p] := c2;
end;
end; var
i: Integer;
begin
if Pos('http://', LowerCase(URL)) <> 0 then
System.Delete(URL, 1, 7); i := Pos('/', URL);
HostName := Copy(URL, 1, i);
FileName := Copy(URL, i, Length(URL) - i + 1); if (Length(HostName) > 0) and (HostName[Length(HostName)] = '/') then
SetLength(HostName, Length(HostName) - 1);
end; procedure CloseHandles;
begin
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
end;begin
try
ParseURL(FTURL, HostName, FileName); if Terminated then begin
FTResult := False;
Exit;
end; hSession := InternetOpen(PChar(FTAgent),INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); hConnect := InternetConnect(hSession, PChar(HostName),
INTERNET_DEFAULT_HTTP_PORT, PChar(FTUserName), PChar(FTPassword), INTERNET_SERVICE_HTTP, 0, 0); if FTPostQuery = '' then RequestMethod := 'GET' else RequestMethod := 'POST'; if FTUseCache then InternetFlag := 0 else InternetFlag := INTERNET_FLAG_RELOAD; AcceptType := PChar('Accept: ' + FTAcceptTypes);
hRequest := HttpOpenRequest(hConnect, RequestMethod, PChar(FileName), 'HTTP/1.0',
PChar(FTReferer), @AcceptType, InternetFlag, 0); if FTPostQuery = '' then
HttpSendRequest(hRequest, nil, 0, nil, 0)
else
HttpSendRequest(hRequest, 'Content-Type: application/x-www-form-urlencoded', 47,
PChar(FTPostQuery), Length(FTPostQuery)); if Terminated then
begin
CloseHandles;
FTResult := False;
Exit;
end; dwIndex := 0;
dwBufLen := 1024;
GetMem(Buf, dwBufLen); FTResult := HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH,
Buf, dwBufLen, dwIndex); if Terminated then
begin
FreeMem(Buf);
CloseHandles;
FTResult := False;
Exit;
end; if FTResult or not FTBinaryData then
begin
if FTResult then FTFileSize := StrToInt(StrPas(Buf)); BytesReaded := 0; if FTToFile then
begin
AssignFile(f, FTFileName);
Rewrite(f, 1);
end else FTStringResult := ''; while True do
begin
if Terminated then
begin
if FTToFile then CloseFile(f);
FreeMem(Buf);
CloseHandles; FTResult := False;
Exit;
end; if not InternetReadFile(hRequest, @Data, SizeOf(Data), BytesToRead) then Break
else
if BytesToRead = 0 then Break
else
begin
if FTToFile then
BlockWrite(f, Data, BytesToRead)
else
begin
TempStr := Data;
SetLength(TempStr, BytesToRead);
FTStringResult := FTStringResult + TempStr;
end; inc(BytesReaded, BytesToRead); end;
end; if FTToFile then
FTResult := FTFileSize = Integer(BytesReaded)
else
begin
SetLength(FTStringResult, BytesReaded);
FTResult := BytesReaded <> 0;
end; if FTToFile then CloseFile(f);
end; FreeMem(Buf); CloseHandles;
ImageExploreMainWnd.Memo1.Lines.Text:=FTStringResult;
Terminate;
except
end;
end;