-
-
могу поделится примером 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;
-
Спасибо, но лишний раз доказывает, что ты не считаешь WinINet потоковым протоколом.
Понимаешь, все бы ничего (я тоже не счит аю протокол потоковым) - я тоже так считал, пока мой сервер не стал возвращать неполные данные, которые должны быть по идее туда засунуты (иначе как бы другие клиенты смогли их прочесть).
Ладно, чую, что сниффер мне в руки и искать кто виноват - сервер или клиент: кто не отдает данные.
-
> [2] тимохов (25.12.08 02:18)
> WinINet
это вообще то не протокол. а вот http в общем случае потоковые, т.е. можно в заголовке прописать размеры вроде, но можно и не прописывать. клиент будет считывать данные пока они не закончатся.
-
> т.к. по опыту последний имеет меньше проблем для конечного пользователя: не надо настраивать прокси — если работает Internet Explorer, то и WinINet функции тоже будут работать. Добавлю, что я не силен в спецификации HTTP.
С последней больше проблем для конечного пользователя. Так как у всех разные ie, разные сервиспаки, пачти винды, и эти либы. Куча глюков, которые невозможно контролировать своим кодом.
Данные прокси без проблем вытаскиваются из ie и применяются в Инди. Скорее всего, и в ICS тоже.
Очень плохо, кстати, что в винде нет такой глобальной настройки, как настройка прокси. Многие 'умники' вместо того, что бы юзать настройки из ie, делают собственные настройки. Лучше бы их изначально вообще не в ie сделали, а в основных настройках винды - может никто бы и не делал ничего другого.
Получаем. У аси - одни настройки, у флэшгета - вторые, у скайпа - третьи, у эксплорера - четвёртые.
Это неудобно в крайней степени. Я буку юзаю дома без прокси, а на работе - с проксёй. Приходится каждый софт ежедневно по два раза перестраивать руками. Блин, неужели этот проблема неочевидна?
-
> в винде нет такой глобальной настройки, как настройка прокси. > Многие 'умники' вместо того, что бы юзать настройки из ie, > делают собственные настройки. Лучше бы их изначально вообще > не в ie сделали, а в основных настройках винды - может никто > бы и не делал ничего другого
так они вызываются отдельно, из панели управления. Да и в реестре ключ свой - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
никто ж не сказал, что его юзать имеет право только ИЭ
|