Конференция "Сети" » Философия windows-библиотеки WinINet
 
  • тимохов (25.12.08 00:00) [0]
  • Eraser © (25.12.08 01:17) [1]
    могу поделится примером
    procedure TfmMain.Grab;
    var
     pInet, pUrl: Pointer;
     Buffer: array[0..1024] of Byte;
     BytesRead: Cardinal;
     msData: TMemoryStream;
     slText: TStringList;
     bReturned: Boolean;
    begin
     pUrl := nil;

     pInet := InternetOpen('InetPing', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
     if pInet = nil then
     begin
       AddToLog('Error - InternetOpen');
       Exit;
     end;

     msData := TMemoryStream.Create;
     slText := TStringList.Create;
     try
       pUrl := InternetOpenUrl(pInet, PChar(edAddress.Text), nil, 0,
         INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD, 0);

       if pUrl = nil then
       begin
         AddToLog('Error - InternetOpenUrl');
         Exit;
       end;

       // Считываем данные.
       repeat
         FillChar(Buffer, SizeOf(Buffer), 0);
         bReturned := InternetReadFile(pUrl, @Buffer, Length(Buffer), BytesRead);
         msData.Write(Buffer, BytesRead);
       until (BytesRead = 0) and bReturned;

       msData.Position := 0;
       slText.LoadFromStream(msData); // <-- Тут считанные данные.
     finally
       if pUrl <> nil then
         InternetCloseHandle(pUrl);

       if pInet <> nil then
         InternetCloseHandle(pInet);

       msData.Free;
       slText.Free;
     end;
    end;

  • тимохов (25.12.08 02:18) [2]
    Спасибо, но лишний раз доказывает, что ты не считаешь WinINet потоковым протоколом.

    Понимаешь, все бы ничего (я тоже не счит аю протокол потоковым) - я тоже так считал, пока мой сервер не стал возвращать неполные данные, которые должны быть по идее туда засунуты (иначе как бы другие клиенты смогли их прочесть).

    Ладно, чую, что сниффер мне в руки и искать кто виноват - сервер или клиент: кто не отдает данные.
  • Eraser © (25.12.08 02:21) [3]
    > [2] тимохов   (25.12.08 02:18)


    > WinINet

    это вообще то не протокол.
    а вот http в общем случае потоковые, т.е. можно в заголовке прописать размеры вроде, но можно и не прописывать. клиент будет считывать данные пока они не закончатся.
  • Дмитрий Белькевич © (31.12.08 02:27) [4]
    > т.к. по опыту последний имеет меньше проблем для конечного пользователя: не надо настраивать прокси — если работает Internet Explorer, то и WinINet функции тоже будут работать. Добавлю, что я не силен в спецификации HTTP.

    С последней больше проблем для конечного пользователя. Так как у всех разные ie, разные сервиспаки, пачти винды, и эти либы. Куча глюков, которые невозможно контролировать своим кодом.

    Данные прокси без проблем вытаскиваются из ie и применяются в Инди. Скорее всего, и в ICS тоже.

    Очень плохо, кстати, что в винде нет такой глобальной настройки, как настройка прокси. Многие 'умники' вместо того, что бы юзать настройки из ie, делают собственные настройки. Лучше бы их изначально вообще не в ie сделали, а в основных настройках винды - может никто бы и не делал ничего другого.

    Получаем. У аси - одни настройки, у флэшгета - вторые, у скайпа - третьи, у эксплорера - четвёртые.

    Это неудобно в крайней степени. Я буку юзаю дома без прокси, а на работе - с проксёй. Приходится каждый софт ежедневно по два раза перестраивать руками. Блин, неужели этот проблема неочевидна?
  • clickmaker © (28.01.09 16:49) [5]
    > в винде нет такой глобальной настройки, как настройка прокси.
    > Многие 'умники' вместо того, что бы юзать настройки из ie,
    > делают собственные настройки. Лучше бы их изначально вообще
    > не в ie сделали, а в основных настройках винды - может никто
    > бы и не делал ничего другого

    так они вызываются отдельно, из панели управления.
    Да и в реестре ключ свой - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

    никто ж не сказал, что его юзать имеет право только ИЭ
 
Конференция "Сети" » Философия windows-библиотеки WinINet
Есть новые Нет новых   [134437   +29][b:0][p:0.001]