Введение в WinInet
От: Игорь Ткачёв Россия linq2db.com
Дата: 07.08.01 14:55
Оценка: 490 (15) +2
Статья:
Введение в WinInet
Автор(ы): Игорь Ткачёв
Дата: 03.08.2001


Авторы:
Игорь Ткачёв

Аннотация:
Ещё вчера Вы даже и не думали о написании программ, использующих интернет протоколы, полагая, что это удел web-программистов. Но, уже сегодня перед Вами стоит задача прочитать/записать, передать/принять, получить/послать что-либо из своей программы на какой-либо интернет-сервер. Какие средства для этого существуют Сколько времени уйдёт на их изучение и эксперименты Давайте рассмотрим один из способов, который позволяет решать большинство подобных задач в максимально короткие сроки.
Если нам не помогут, то мы тоже никого не пощадим.
придётся подправить getaddr.zip
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.01.03 00:00
Оценка:
На странице открываемой примером

A new version of Find ZIP Codes is now available.
This version will continue to be supported for a limited time.
A journey of a thousand miles must begin with a single step © Lau Tsu
Ограничения
От: mSerg Украина  
Дата: 03.09.02 14:41
Оценка:
>1. INFO: WinInet Limits Connections Per Server (Q183110).
>WinInet ограничивает число соединений для одного сервера, которое может быть равно двум или четырём. >Такое ограничение связано с соглашениями HTTP спецификации и стандарта.

Это ограничение задается ключем в реестре.
И в Windows 2000 значение по умолчанию — 100.
WBR, Serg Matskov
Пример какой-то...
От: Strudel  
Дата: 25.02.02 01:37
Оценка:
Непонятный. :)

if (fnews.is_open()) for (;) {
// читаем данные
char szData[1024];
DWORD dwBytesRead;
BOOL bRead =
::InternetReadFile(
hRequest,
szData,sizeof(szData)-1,
&dwBytesRead);

// выход из цикла при ошибке или завершении
if (bRead == FALSE || dwBytesRead == 0)
break;

// сохраняем результат
szData[dwBytesRead] = 0;
Тут что, надежды, прочитать больше килобайта, нет? Если файл размером больше или читается не за один заход, то получим только его хвост.
Proxy settings query
От: Alexandr Lookoshkoff www.ginstall.com
Дата: 06.09.01 01:30
Оценка:
(Сорри, ентер лишний раз нажал)

Вот почитал статью про вининет... полезно, но вининет не во всяких виндах есть и не со всяким эксплорером идет, а мне надо чтобы везде работало. Даже винсока второго в старой 95 не было. Приходится довольствоваться первым, но всплыла проблема определения прокси-сервера на системах где стоит галка "автоопределение" :(

И что-то никак у меня не получается добиться прокси от вининета. Т.е. заставить его коннектиться с текущими настройками я могу, но переделывать программу, уже работающую... делить ее на две ветки одну для винсока, другую для вининета не очень то хочется, а где забрать настройки прокси я так и не понял :(
Proxy settings query
От: Alexandr Lookoshkoff www.ginstall.com
Дата: 06.09.01 01:25
Оценка:
Как насчет асинхронного режима?
От: Аноним  
Дата: 28.08.01 05:25
Оценка:
Дает ли какое-нибудь ощутимое преимущество в скорости загрузки использование сабж?
getaddr - облом
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 14.08.01 01:15
Оценка:
While trying to retrieve the URL: http://www.usps.com/cgi-bin/zip4/zip4inq2

The following error was encountered:

Cache Access Denied.

Sorry, you are not currently allowed to request:

http://www.usps.com/cgi-bin/zip4/zip4inq2
from this cache until you have authenticated yourself.
CALC.exe ругается
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 14.08.01 01:10
Оценка:
...говорит "Неправильный указатель" (причем в виндовой кодировке в консольном окошке).
Чего в супе не хватает.
ОС-win2000, доступ в инет через прокси.
WinInet
От: sberezuk  
Дата: 08.08.01 14:55
Оценка:
Hello Igor. An article is just perfect. Unfortunately, no time to check how that works. Thanks.
Re: Proxy settings query
От: SergPas Украина  
Дата: 03.04.02 03:53
Оценка:
Можно подправить :
bool CHTTPReader::OpenConnection (LPCTSTR lpszServerName,LPCTSTR lpszLogin,LPCTSTR lpszPassword)
{
if (OpenInternet() && m_hConnection == NULL)
m_hConnection = ::InternetConnect(
m_hInternet,
lpszServerName?
lpszServerName:
m_lpszServerName?
m_lpszServerName:
TEXT("localhost"),
m_bUseSSL? INTERNET_DEFAULT_HTTPS_PORT: INTERNET_DEFAULT_HTTP_PORT,
lpszLogin,
lpszPassword,
INTERNET_SERVICE_HTTP,
0,
1u);

return CheckError(m_hConnection != NULL);
}
и должно заработать
Re: Пример какой-то...
От: Strudel  
Дата: 25.02.02 01:43
Оценка:
Извиниюсь,разобрался.

fnews << szData; — внутри цикла. Не заметил. :)
Re: Как насчет асинхронного режима?
От: CooLer Россия http://bestsoft.far.ru
Дата: 11.09.01 06:47
Оценка:
Ничего он не даёт, только геморой. Для FTP может что-то и даёт, для HTTP я не нашёл ни одного толкового примера, что подтвердило мою версию о том, что HTTP и асинхронный режим не дружат.
Поэтому я в статью это даже и не включал. Лучше использовать многозадаяность. Если я не прав с радостью выслушаю любую информацию по этому поводу, а лучше хороший пример.
"Выше голову" — сказл палач, надевая петлю
Re:CALC.exe ругается
От: CooLer Россия http://bestsoft.far.ru
Дата: 21.08.01 01:11
Оценка:
Это очень плохо.
У меня всё работает и через прокси и без.
Если работает в браузере, то должно работать и через WinInet, если нет, то у тебя неправильный WinInet ;)
Попробуй ещё поставить rd.SetDataBuffer(20*1024); перед чтением, может быть нулевая длинна возвращается не только из-за неправильной работы сервера, но и клиента.
"Выше голову" — сказл палач, надевая петлю
Re:CALC.exe ругается
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 20.08.01 21:50
Оценка:
IT, go and look! :-)
Re:getaddr - облом
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 14.08.01 01:21
Оценка:
похоже дело в том, что прокси требует авторизации — логин, пароль.
Как это дело отрабатывается? Примерчик бы работающий...
Re:WinInet
От: CooLer Россия http://bestsoft.far.ru
Дата: 09.08.01 00:50
Оценка:
Спасибо! А чего там чекать, WinInet как WinInet :o)
А вообще-то, каждый архив проекта в каталоге Release содержит собранную программу, проверенную доступными антивирусными средствами и готовую к исполнению. Запуск примеров много времени не займёт.
Happy coding,
Игорь.
"Выше голову" — сказл палач, надевая петлю
А как у тебя CALC компилился?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 21.08.01 22:15
Оценка:
cout << root->selectSingleNode(L"/calc/x")->text << " * "

calc.cpp(23) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class _bstr_t' (or there is no acceptable conversion)
Re: А как у тебя CALC компилился?
От: CooLer Россия http://bestsoft.far.ru
Дата: 22.08.01 06:15
Оценка:
Странно! А у меня всё работает. Может у тебя и VC++ не правильный? ;)
Попробуй поставить (LPCTSTR)перед root->...
"Выше голову" — сказл палач, надевая петлю
Re: А как у тебя CALC компилился?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.08.01 16:50
Оценка:
горе мне горе, и WinInet у меня не правильный и VC (№6+SP5+STLPort) :-(
С (LPCTSTR) конечно все прошло, но вот где берут cout, которые и без этого работают?
Ладно, ближе к телу. Дело видимо все-таки в том что выход через мой прокси по паролю. Поскольку calc его нигде не спрашивает, то в

char *data = rd.GetData();

я получаю страничку с Cache Access Denied и т.д. и т.п

и после этого

MSXML::IXMLDOMElementPtr root = xml->documentElement;

root==NULL и дальше выбрасывается исключение "Неправильный указатель".

Как все-таки доработать примерчик, чтобы он спрашивал пароль к прокси?
Re: А как у тебя CALC компилился?
От: CooLer Россия http://bestsoft.far.ru
Дата: 22.08.01 17:15
Оценка:
> но вот где берут cout, которые и без этого работают?

Это скорее не cout, а #import.

По поводу пароля, посмотри:

HINTERNET WINAPI InternetOpen(
LPCTSTR lpszAgent,
DWORD dwAccessType,
LPCTSTR lpszProxyName,
LPCTSTR lpszProxyBypass,
DWORD dwFlags
);
"Выше голову" — сказл палач, надевая петлю
По поводу пароля
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.08.01 17:32
Оценка:
так там же все вроде правильно —
m_hInternet = ::InternetOpen(
lpszAgent,
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
т.е. взять все настройки из реестра (т.е. надо думать из настроек IE), прокси там прописан, а пароль IE потом переспрашивает.
Re: По поводу пароля
От: CooLer Россия http://bestsoft.far.ru
Дата: 23.08.01 00:35
Оценка:
У тебя потом IE переспрашивает, а в примере имя и пароль всегда задаются как NULL. Попробуй вместо них подставить... какой там у тебя пароль? ;)
"Выше голову" — сказл палач, надевая петлю
Re: По поводу пароля
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 11.09.01 01:08
Оценка:
Ну вот, из коммандировки вернулся, можно продолжить :-)
Итак, куда подставить-то?

HINTERNET InternetOpen(
IN LPCSTR lpszAgent,
IN DWORD dwAccessType,
IN LPCSTR lpszProxyName,
IN LPCSTR lpszProxyBypass,
IN DWORD dwFlags
);

...
lpszProxyName
Address of a string that contains the name of the proxy server (or servers) to use if proxy access was specified. If this parameter is NULL, the function reads proxy information from the registry...

lpszProxyBypass
Address of an optional list of host names or IP addresses, or both, that should not be routed through the proxy.
... If this parameter is NULL, the function reads the bypass list from the registry.

Имеем имя прокси и список хостов, на которые надо ходить мимо прокси.
Re: По поводу пароля
От: CooLer Россия http://bestsoft.far.ru
Дата: 11.09.01 07:19
Оценка:
Дык у тебя и MSDN неправильный? ;) шютка.

Это я в попыхах видимо отвечал, сам не очень разобрался что к чему, сори.
Ищи в MSDN статью "HOWTO: How to Handle Proxy Authorization with WinInet"
Я у себя проверить это дело не могу, если у тебя будет всё ok, давай подработаем класс и вставим это дело в статью. Там как-то можно определить требуется авторизация или нет.
"Выше голову" — сказл палач, надевая петлю
Re: 1u
От: blackstorm  
Дата: 16.06.06 14:37
Оценка:
Объясните пожалуйсто кто-нибудь назначение последнего параметра
функции internetconnect, и смысл значения 1u. В msdn возможные значения не
описаны, а смысл вложенный в описание понять не могу.
Re: Введение в WinInet
От: lehamain  
Дата: 10.02.07 09:38
Оценка:
а не надо в деструкторе CHTTPReader
вызывать CloseInternet()?

Мне известно, что мне ничего не известно... (О. Хайям)
Re[2]: 1u
От: 0x8000FFFF Россия  
Дата: 12.02.07 09:59
Оценка:
dwContext
[in] Pointer to a variable that contains an application-defined value that is used to identify the application context for the returned handle in callbacks.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.