Tôi không quan tâm đó là chuỗi, danh sách chuỗi, bản ghi nhớ, v.v ... không phải là tệp đĩaLàm thế nào để tải một trang web thành một biến?
Làm cách nào để tải xuống trang web cạnh tranh thành biến? Cảm ơn
Tôi không quan tâm đó là chuỗi, danh sách chuỗi, bản ghi nhớ, v.v ... không phải là tệp đĩaLàm thế nào để tải một trang web thành một biến?
Làm cách nào để tải xuống trang web cạnh tranh thành biến? Cảm ơn
Sử dụng Indy:
const
HTTP_RESPONSE_OK = 200;
function GetPage(aURL: string): string;
var
Response: TStringStream;
HTTP: TIdHTTP;
begin
Result := '';
Response := TStringStream.Create('');
try
HTTP := TIdHTTP.Create(nil);
try
HTTP.Get(aURL, Response);
if HTTP.ResponseCode = HTTP_RESPONSE_OK then begin
Result := Response.DataString;
end else begin
// TODO -cLogging: add some logging
end;
finally
HTTP.Free;
end;
finally
Response.Free;
end;
end;
+1, để câu trả lời của bạn ở trên cùng! –
@AndreasRejbrand: cảm ơn :) –
+1 NHƯNG, tôi cần gì trong "sử dụng" để truy cập HTTP_RESPONSE_OK? – Mawg
Sử dụng bản Microsoft Windows WinInet API:
function WebGetData(const UserAgent: string; const URL: string): string;
var
hInet: HINTERNET;
hURL: HINTERNET;
Buffer: array[0..1023] of AnsiChar;
BufferLen: cardinal;
begin
result := '';
hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if hInet = nil then RaiseLastOSError;
try
hURL := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0);
if hURL = nil then RaiseLastOSError;
try
repeat
if not InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) then
RaiseLastOSError;
result := result + UTF8Decode(Copy(Buffer, 1, BufferLen))
until BufferLen = 0;
finally
InternetCloseHandle(hURL);
end;
finally
InternetCloseHandle(hInet);
end;
end;
Thử:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text := WebGetData('My Own Client', 'http://www.bbc.co.uk')
end;
Nhưng này chỉ hoạt động nếu mã hóa là UTF- số 8. Vì vậy, để làm cho nó hoạt động trong các trường hợp khác, bạn phải xử lý các trường hợp này một cách riêng biệt hoặc bạn có thể sử dụng trình bao bọc cấp cao Indy, theo đề xuất của Marjan. Tôi thừa nhận chúng vượt trội trong trường hợp này, nhưng tôi vẫn muốn quảng bá API cơ bản, nếu không có lý do nào khác ngoài giáo dục ...
+1 để sử dụng công cụ có sẵn cho OS. –
LOL, xin lỗi, đã sửa. Não của tôi đang bị sương mù. Phải là vì tôi đã qua 50 thứ Năm tuần trước. –
+1 cho "giáo dục" :-) – Mawg
có thể trùng lặp với [Làm cách nào để tìm nạp nguồn của trang Web?] (Http : //stackoverflow.com/questions/7800026/how-can-i-fetch-the-source-of-a-web-page) –