Показать сообщение отдельно
  #4  
Старый 07.01.2013, 15:06
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Инди, как показала практика с одним моим парсером, любит падать и виснуть в самый неподходящий момент.
Решил переходом на WinHTTP, который имеет на порядок меньше ограничений, да и работает шустрее (WinAPI таки).
Пример кода (winhttp.pas брать тут):
Код:
uses
  WinHTTP;

function LoadFile(server, url: WideString): WideString;
begin
var
  hInet, hConn, hReq: Pointer;
  buf: array of char;
  bufSize, bufRead, p: cardinal;
begin
  hInet := WinHttpOpen('UserAgent/1.0',0,nil,nil,0);
  hConn := WinHttpConnect(hInet, PWideChar(server), INTERNET_DEFAULT_HTTP_PORT, 0);
  hReq := nil;
  repeat
    if hReq <> nil then WinHttpCloseHandle(hReq);
    repeat hReq := WinHttpOpenRequest(hConn, 'GET', PWideChar(url), 'HTTP/1.1', nil, nil, 0) until hReq <> nil;
    while not WinHttpSendRequest(hReq, nil, 0, nil, 0, 0, 0) do;
  until WinHttpReceiveResponse(hReq, nil);
  bufSize := 0;
  p := 0;
  while WinHttpQueryDataAvailable(hReq, bufSize) do begin
    SetLength(buf,p+bufSize);
    if bufSize = 0 then break;
    bufRead := 0;
    WinHttpReadData(hReq, @buf[p], bufSize, bufRead);
    inc(p,bufRead);
  end;
  WinHttpCloseHandle(hReq);
  WinHttpCloseHandle(hConn);
  WinHttpCloseHandle(hInet);
  SetLength(buf,p+1);
  Result := UTF8Decode(UTF8String(PChar(@buf[0])));
end;

procedure TForm1.Button1Click(Sender: TButton);
begin
  MessageBoxW(0,PWideChar(LoadFile('delphisources.ru','/forum/index.php')),nil,0);
  // Используем MessageBoxW для нормального отображения UTF-8
end;
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием