Тема: Wininet+Proxy
Показать сообщение отдельно
  #2  
Старый 09.09.2013, 11:44
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

рабочий пример:
Код:
var
  FSession: HINTERNET;
  FConnect: HINTERNET;
  FRequest: HINTERNET;

  szAcceptTypes: array [0..1] of PChar;

  BufferLength: DWORD;
  Data: DWORD;
  Indx: DWORD;

  FileStream: TFileStream;

  Buffer: PChar;
  NumberOfBytesAvailable: DWORD;
  NumberOfBytesRead: DWORD;

begin
//  FSession:=InternetOpen('Mozilla/4.0', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  FSession:=InternetOpen('Mozilla/4.0', INTERNET_OPEN_TYPE_PROXY, '115.25.216.6:80', nil, 0);
  if FSession=nil then RaiseLastOSError;

  FConnect:=InternetConnect(FSession, '2ip.ru', INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
  if FConnect=nil then RaiseLastOSError;

  szAcceptTypes[0]:='text/*';
  szAcceptTypes[1]:=nil;
  FRequest:=HttpOpenRequest(FConnect, 'GET', '/', 'HTTP/1.1', '', @szAcceptTypes, 0, 0);
  if FRequest=nil then RaiseLastOSError;

  if not HttpSendRequest(FRequest, nil, 0, nil, 0) then RaiseLastOSError;

  FileStream:=TFileStream.Create('2ip.htm', fmCreate);
  try
    while True do
    begin
      if not InternetQueryDataAvailable(FRequest, NumberOfBytesAvailable, 0, 0) then RaiseLastOSError;
      Buffer:=GetMemory(NumberOfBytesAvailable);
      try
        if not InternetReadFile(FRequest, Buffer, NumberOfBytesAvailable, NumberOfBytesRead) then RaiseLastOSError;
        if NumberOfBytesRead=0 then Break;
        FileStream.Write(Buffer^, NumberOfBytesRead);
      finally
        FreeMemory(Buffer);
      end;
    end;
  finally
    FileStream.Free;
  end;

  BufferLength:=SizeOf(Data);
  Indx:=0;
  if not HttpQueryInfo(FRequest, HTTP_QUERY_FLAG_NUMBER or HTTP_QUERY_STATUS_CODE, @Data, BufferLength, Indx) then RaiseLastOSError;
  ShowMessage(IntToStr(Data));


  InternetCloseHandle(FRequest);
  InternetCloseHandle(FConnect);
  InternetCloseHandle(FSession);
end;
косяки доработать самому)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием