<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208846&amp;view=findpost&amp;p=1751283</guid>
        <pubDate>Sat, 03 Nov 2007 12:41:46 +0000</pubDate>
        <title>Загрузка Интернет страницы, через прокси-сервер, используя, библиотеку wininet.</title>
        <link>https://forum.sources.ru/index.php?showtopic=208846&amp;view=findpost&amp;p=1751283</link>
        <description><![CDATA[Катька:  <br>
<div class='tag-align-center'><span class='tag-size' data-value='13' style='font-size:13pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>Загрузка Интернет страницы, через прокси-сервер, используя, библиотеку wininet.</strong></span></span></div><br>
Если пользоваться библиотекой winsock Интернет-страницу загрузить можно, но сделать это гораздо, сложнее ;), поэтому, я покажу - способ загрузки страницы по средствам библиотеки wininet. Плюс этот функционал будет работать, через прокси-сервер используя функцию UrlMkSetSessionOption из библиотеки urlmon. <br>
<br>
<div class='tag-align-center'><span class='tag-size' data-value='11' style='font-size:11pt;'><span class="tag-color tag-color-named" data-value="green" style="color: green"><strong class='tag-b'>Функции WinInet API</strong></span></span></div><br>
Разберём все функции по порядку и рассмотрим только те параметры, которые нам будут необходимы.<br>
<br>
 <strong class='tag-b'>InternetOpen</strong><br>
<br>
Эта функция инициализирует WinInet и возвращает дескриптор, который необходим для вызова других функций WinInet. В случае неудачи возвращается NULL. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError. <br>
<br>
 <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HINTERNET WINAPI InternetOpen(</div><div class="code_line">&nbsp;&nbsp; &nbsp;LPCTSTR lpszAgent,</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwAccessType,</div><div class="code_line">&nbsp;&nbsp; &nbsp;LPCTSTR lpszProxyName, </div><div class="code_line">&nbsp;&nbsp; &nbsp;LPCTSTR lpszProxyBypass, </div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwFlags</div><div class="code_line">);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Параметры:<table class='post_table tag-table'><tr><th>Параметр</th><th>Описание</th></tr><tr><td>lpszAgent</td><td>Задаёт имя приложения, которое используется как агент в HTTP протоколе. Сервер может определять агента с помощью переменной сервера HTTP_USER_AGENT. Если ваша программа собирается выдавать себя за MS Internet Explorer, передайте в этот параметр строчку &quot;Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914) &quot; </td></tr><tr><td> dwAccessType</td><td>Задаёт необходимый тип доступа (прямой или через прокси). Мы будем использовать значение INTERNET_OPEN_TYPE_PRECONFIG, которое устанавливает тип доступа в соответствии с установками в реестре. </td></tr></table><br>
<br>
<strong class='tag-b'>InternetConnect</strong><br>
<br>
Эта функция открывает FTP, HTTP или Gopher сессию для заданного сайта.<br>
<br>
 <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HINTERNET InternetConnect(</div><div class="code_line">&nbsp;&nbsp; &nbsp;HINTERNET hInternet,</div><div class="code_line">&nbsp;&nbsp; &nbsp;LPCTSTR lpszServerName,</div><div class="code_line">&nbsp;&nbsp; &nbsp;INTERNET_PORT nServerPort,</div><div class="code_line">&nbsp;&nbsp; &nbsp;LPCTSTR lpszUsername,</div><div class="code_line">&nbsp;&nbsp; &nbsp;LPCTSTR lpszPassword,</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwService,</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD dwFlags,</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD_PTR dwContext</div><div class="code_line">);</div></ol></div></div></div></div><br>
Параметры:<table class='post_table tag-table'><tr><th>Параметр</th><th>Описание</th></tr><tr><td>hInternet</td><td>Дескриптор, полученный вызовом предыдущей функции. </td></tr><tr><td>lpszServerName</td><td>Задаёт имя сервера. Это может быть обычное имя, например www.rsdn.ru, или адрес IP. </td></tr><tr><td>nServerPort</td><td>Номер TCP/IP порта к которому мы собираемся подсоединиться. Мы будем использовать значене INTERNET_DEFAULT_HTTP_PORT для обычных соединений, либо INTERNET_DEFAULT_HTTPS_PORT для SSL соединений. </td></tr><tr><td> dwService</td><td>Тип сервиса - FTP, HTTP или Gopher. Мы будем использовать INTERNET_SERVICE_HTTP.  </td></tr></table><br>
<br>
<strong class='tag-b'>InternetOpenUrl</strong><br>
<br>
Функция принимает полный URL файла и возвращает указатель на него.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function InternetOpenUrl(hInet: HINTERNET; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lpszUrl: PChar; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lpszHeaders: PChar; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dwHeadersLength: DWORD; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dwFlags: DWORD; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dwContext: DWORD): HINTERNET; stdcall;</div></ol></div></div></div></div><br>
Параметры:<table class='post_table tag-table'><tr><th>Параметр</th><th>Описание</th></tr><tr><td>HInet</td><td>указатель, полученный после вызова InternetOpen. </td></tr><tr><td>LpszUr</td><td>URL , до которого нужно получить доступ. Обязательно должен начинаться с указания протокола, по которому будет происходить соединение. Поддерживаются следующие протоколы - ftp:, gopher:, http:, https:. </td></tr><tr><td>LpszHeaders</td><td> содержит заголовок HTTP запроса. </td></tr><tr><td>DwHeadersLength</td><td>длина заголовка. Если заголовок nil, то можно установить значение –1, и длина будет вычислена автоматически. </td></tr><tr><td>DwFlags</td><td>флаг, задающий дополнительные параметры перед выполнением функции. Вот некоторые его значения: INTERNET_ FLAG_EXISTING_CONNECT, INTERNET_FLAG_HYPERLINK, INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP, INTERNET_FLAG_NO_AUTO_REDIRECT, INTERNET_FLAG_NO_CACH E_WRITE, INTERNET_FLAG_NO_COOKIES. </td></tr></table>Возвращается значение TRUE, если соединение успешно, или FALSE - в противном случае. <br>
<br>
 <strong class='tag-b'>InternetReadFile </strong> <br>
<br>
Функция позволяет считывать данные, используя указатель, полученный в результате вызова InternetOpenUrl. Так же, как и все остальные функции, возвращает TRUE или FALSE. После завершения работы функции нужно освободить указатель Hfile, вызвав InternetCloseHandle(hUrlFile) .<br>
<br>
 <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function InternetReadFile(hFile: HINTERNET; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lpBuffer: Pointer; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dwNumberOfBytesToRead: DWORD; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;</div></ol></div></div></div></div> <br>
Параметры:<table class='post_table tag-table'><tr><th>Параметр</th><th>Описание</th></tr><tr><td>HFile</td><td>указатель на файл, полученный после вызова функции InternetOpenUrl</td></tr><tr><td>LpBuffer</td><td>указатель на буфер, куда будут заноситься данные. </td></tr><tr><td>DwNumberOfBytesToRead</td><td>число байт, которое нужно причитать</td></tr><tr><td>lpdwNumberOfBytesRead</td><td>содержит количество прочитанных байтов. Устанавливается в 0 перед проверкой ошибок.</td></tr></table><br>
Вот, в принципе, и все об самых основных функциях, которые я пользовала в данной статье они находятся в библе wininet . ;)  Структура INTERNET_PROXY_INFO для использования в функции UrlMkSetSessionOption загрузки страницы через проксю, включает в себя следующие параметры:<br>
<br>
 <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">typedef struct {</div><div class="code_line">&nbsp;&nbsp; DWORD dwAccessType;</div><div class="code_line">&nbsp;&nbsp; LPCTSTR lpszProxy;</div><div class="code_line">&nbsp;&nbsp; LPCTSTR lpszProxyBypass;</div><div class="code_line">}</div></ol></div></div></div></div>где dwAccessType – тип прокси для открытия страницы; lpszProxy – собственно сам адрес и порт(прокси-адрес); lpszProxyBypass – использование прокси -сервера имеющего пароль на загрузку страниц через него в данном случае нам это не требуется ;) <br>
<br>
Функция:<br>
 <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure UrlMkSetSessionOption (dwOption : Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; var pBuffer : Pointer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; dwBufferLength : Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; dwReserved : Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp; stdcall; external &#39;URLMON&#39; name &#39;UrlMkSetSessionOption&#39;</div></ol></div></div></div></div>где dwOption - опции прокси; pBuffer – сама структура INTERNET_PROXY_INFO; dwBufferLength – размер структуры, ну и конечно флаги направления… <br>
<br>
 Ну и наконец сам код, который загружает код страницы в поле :)<br>
<br>
 <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">; pwi.asm</div><div class="code_line">.386</div><div class="code_line">.model flat,stdcall</div><div class="code_line">option casemap:none</div><div class="code_line">&nbsp;</div><div class="code_line">include \masm32\include\windows.inc</div><div class="code_line">include \masm32\include\user32.inc</div><div class="code_line">include \masm32\include\kernel32.inc</div><div class="code_line">include \masm32\include\wininet.inc</div><div class="code_line">include \masm32\include\urlmon.inc</div><div class="code_line">&nbsp;</div><div class="code_line">includelib \masm32\lib\user32.lib</div><div class="code_line">includelib \masm32\lib\kernel32.lib</div><div class="code_line">includelib \masm32\lib\urlmon.lib</div><div class="code_line">includelib \masm32\lib\wininet.lib</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_T macro p1, p2 ;макрос обработки строк</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;local l</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ifb &#60;p2&#62;; Строка без имени</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.data</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;l &nbsp; db p1, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.code</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exitm &nbsp; &#60;addr l&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else &nbsp; &nbsp;; Строка с именем</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.data</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p1 &nbsp;db p2, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.code</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exitm &nbsp; &#60;addr p1&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;endif</div><div class="code_line">&nbsp;&nbsp; &nbsp;endm</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_INPUTDATA &nbsp; equ 1000 ;окно приёма данных</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_GETHOST &nbsp; &nbsp; equ 1001 ;edit для хоста</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_PROXI &nbsp; &nbsp; &nbsp; equ 1002 ;edit для прокси</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_LOAD &nbsp; &nbsp; &nbsp; &nbsp;equ 1003 ;кнопка загрузить</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_EXIT &nbsp; &nbsp; &nbsp; &nbsp;equ 1004 ;выход</div><div class="code_line">&nbsp;</div><div class="code_line">;=================</div><div class="code_line">; Local prototypes</div><div class="code_line">;=================</div><div class="code_line">&nbsp;&nbsp; &nbsp;WndProc &nbsp; &nbsp; PROTO :DWORD,:DWORD,:DWORD,:DWORD</div><div class="code_line">&nbsp;</div><div class="code_line">.data</div><div class="code_line">&nbsp;;прокси - адрес и порт &nbsp;&quot;218.7.13.186:80&quot; &#60; - пригодится ;) </div><div class="code_line">&nbsp;&nbsp;hInstance &nbsp; &nbsp; dd 0</div><div class="code_line">&nbsp;&nbsp;AgetUser &nbsp; &nbsp; &nbsp;db &#39;}{}{}{&#39;,0;ЮзерАгент - название программы, которое будет отображатся на сервере</div><div class="code_line">;дескрипторы wininet - функций</div><div class="code_line">&nbsp;&nbsp;hInternet &nbsp; &nbsp; dd 0</div><div class="code_line">&nbsp;&nbsp;hOpenUrl &nbsp; &nbsp; &nbsp;dd 0</div><div class="code_line">&nbsp;&nbsp;hConnect &nbsp; &nbsp; &nbsp;dd 0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;ProxyHP &nbsp; &nbsp; &nbsp; db 20 dup (?);буфер для прокси адреса</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;.data?</div><div class="code_line">&nbsp;&nbsp;ByteWRite &nbsp; &nbsp; dd ?;сколько байт записано</div><div class="code_line">&nbsp;&nbsp;StrokaIz &nbsp; &nbsp; &nbsp;db 1024 dup (?) ;буфер для хоста</div><div class="code_line">&nbsp;&nbsp;iBuffer &nbsp; &nbsp; &nbsp; dw 24000 dup (?);для получения данных</div><div class="code_line">&nbsp;&nbsp;busize &nbsp; &nbsp; &nbsp; &nbsp;= $-iBuffer;размер буфера</div><div class="code_line">&nbsp;&nbsp;PiProxy &nbsp; &nbsp; &nbsp; INTERNET_PROXY_INFO &#60;&#62;;структура для Proxy соединения</div><div class="code_line">&nbsp;</div><div class="code_line">.code</div><div class="code_line">&nbsp;&nbsp; &nbsp;start:</div><div class="code_line">&nbsp;</div><div class="code_line">; #########################################################################</div><div class="code_line">&nbsp;&nbsp; &nbsp;invoke &nbsp;GetModuleHandle, NULL</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; hInstance, eax</div><div class="code_line">&nbsp;&nbsp; &nbsp;invoke &nbsp;DialogBoxParam,hInstance,_T(&quot;MAINDIALOG&quot;),0,ADDR WndProc,0</div><div class="code_line">&nbsp;&nbsp; &nbsp;invoke &nbsp;ExitProcess,eax</div><div class="code_line">&nbsp;</div><div class="code_line">; #########################################################################</div><div class="code_line">&nbsp;</div><div class="code_line">WndProc proc hWin &nbsp; :DWORD,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uMsg &nbsp; :DWORD,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wParam :DWORD,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lParam :DWORD</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;.if uMsg == WM_INITDIALOG</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;SendMessage,hWin,WM_SETTEXT,0, _T(&quot;HtmlProxyGet&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;.elseif uMsg==WM_COMMAND</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax, wParam</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; edx, eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;shr &nbsp; &nbsp; edx, 16</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.if edx == BN_CLICKED</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.if ax == IDC_LOAD;берём адрес и порт прокси - сервера из Edit-control</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;GetDlgItemText,hWin,IDC_PROXI,addr ProxyHP,-1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;опции прокси сервера</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; PiProxy.dwAccessType, INTERNET_OPEN_TYPE_PROXY</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;адрес и порт</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; PiProxy.lpszProxy,offset ProxyHP</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;функция создания Proxy сессии &nbsp; опции прокси &nbsp; параметры структуры &nbsp; размер структуры</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;UrlMkSetSessionOption,INTERNET_OPTION_PROXY,addr PiProxy, SizeOf(INTERNET_PROXY_INFO),0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;хост из Edit- control</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;GetDlgItemText,hWin,IDC_GETHOST,addr StrokaIz,-1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;инициализация WinInet и возвращает дескриптора, который </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;необходим для вызова других функций WinInet</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetOpen,addr AgetUser,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; &nbsp;hInternet,eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;открывает &nbsp;HTTP &nbsp;сессию для заданного сайта</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetConnect, [hInternet],\;Дескриптор, полученный вызовом предыдущей функции. </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addr StrokaIz,\;хост</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INTERNET_DEFAULT_HTTP_PORT,\; для обычных соединений</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL,NULL,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INTERNET_SERVICE_HTTP,\;Тип сервиса </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [hConnect],eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;принимает полный URL файла и возвращает указатель на него.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetOpenUrl,[hInternet],\;указатель, полученный после вызова InternetOpen.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addr StrokaIz,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0, 0,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INTERNET_FLAG_RELOAD,\;флаг, задающий дополнительные параметры перед выполнением функции</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [hOpenUrl],eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;позволяет считывать данные, используя указатель,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; полученный в результате вызова InternetOpenUrl. </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;Так же, как и все остальные функции, возвращает TRUE или FALSE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetReadFile, [hOpenUrl],\; указатель на файл, полученный после вызова функции InternetOpenUrl</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addr (iBuffer),\;указатель на буфер, куда будут заноситься данные</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; busize ,\;число байт, которое нужно причитать</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addr ByteWRite;содержит количество прочитанных байтов. Устанавливается в 0 перед проверкой ошибок. </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;выводим html - код</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;SetDlgItemText,hWin,IDC_INPUTDATA, &nbsp;addr iBuffer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; &nbsp;закрытие дескрипторов вызванных wininet - функциями</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetCloseHandle,hOpenUrl</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetCloseHandle,hConnect</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetCloseHandle,hInternet</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.elseif ax == IDC_EXIT</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;SendMessage, hWin, WM_CLOSE, 0, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.endif</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.endif</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;.elseif uMsg == WM_CLOSE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;EndDialog,hWin,0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;.else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax, FALSE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">&nbsp;&nbsp; &nbsp;.endif</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax, TRUE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">&nbsp;</div><div class="code_line">WndProc endp</div><div class="code_line">&nbsp;</div><div class="code_line">; ########################################################################</div><div class="code_line">&nbsp;</div><div class="code_line">end start</div></ol></div></div></div></div><br>
Диалог:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// wi.rc</div><div class="code_line">#define DS_MODALFRAME &nbsp; 0x80L</div><div class="code_line">&nbsp;</div><div class="code_line">#define WS_POPUP &nbsp; &nbsp; &nbsp; &nbsp;0x80000000L</div><div class="code_line">#define WS_CHILD &nbsp; &nbsp; &nbsp; &nbsp;0x40000000L</div><div class="code_line">#define WS_VISIBLE &nbsp; &nbsp; &nbsp;0x10000000L</div><div class="code_line">#define WS_CAPTION &nbsp; &nbsp; &nbsp;0x00C00000L</div><div class="code_line">#define WS_BORDER &nbsp; &nbsp; &nbsp; 0x00800000L</div><div class="code_line">#define WS_SYSMENU &nbsp; &nbsp; &nbsp;0x00080000L</div><div class="code_line">#define WS_GROUP &nbsp; &nbsp; &nbsp; &nbsp;0x00020000L</div><div class="code_line">#define WS_TABSTOP &nbsp; &nbsp; &nbsp;0x00010000L</div><div class="code_line">&nbsp;</div><div class="code_line">#define ES_LEFT &nbsp; &nbsp; &nbsp; &nbsp; 0x00000000L</div><div class="code_line">#define ES_MULTILINE &nbsp; &nbsp;0x00000004L</div><div class="code_line">#define ES_AUTOVSCROLL &nbsp;0x00000040L</div><div class="code_line">#define ES_AUTOHSCROLL &nbsp;0x00000080L</div><div class="code_line">&nbsp;</div><div class="code_line">#define IDC_INPUTDATA &nbsp; 1000</div><div class="code_line">#define IDC_GETHOST &nbsp; &nbsp; 1001</div><div class="code_line">#define IDC_PROXI &nbsp; &nbsp; &nbsp; 1002</div><div class="code_line">#define IDC_LOAD &nbsp; &nbsp; &nbsp; &nbsp;1003</div><div class="code_line">#define IDC_EXIT &nbsp; &nbsp; &nbsp; &nbsp;1004</div><div class="code_line">&nbsp;</div><div class="code_line">MAINDIALOG DIALOG 10, 15, 282, 199</div><div class="code_line">STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU</div><div class="code_line">CAPTION &quot;MAINDIALOG&quot;</div><div class="code_line">FONT 8, &quot;MS Sans Serif&quot;</div><div class="code_line">BEGIN</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CONTROL &quot;&quot;, IDC_INPUTDATA, &quot;EDIT&quot;, ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 8, 17, 264, 92</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CTEXT &quot;Код страницы&quot;, -1, 8, 4, 264, 8, WS_CHILD | WS_VISIBLE | WS_GROUP </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CTEXT &quot;Нужный хост&quot;, -1, 8, 117, 264, 8, WS_CHILD | WS_VISIBLE | WS_GROUP</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;EDITTEXT IDC_GETHOST, 8, 128, 264, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CTEXT &quot;Прокси&quot;, -1, 8, 148, 264, 8, WS_CHILD | WS_VISIBLE | WS_GROUP</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;EDITTEXT IDC_PROXI, 8, 160, 264, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DEFPUSHBUTTON &quot;Загрузить&quot;, IDC_LOAD, 8, 180, 48, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PUSHBUTTON &quot;Выход&quot;, IDC_EXIT, 224, 180, 48, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP</div><div class="code_line">END</div></ol></div></div></div></div><br>
   Компилируется: <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">E:\masm32\bin\rc wi.rc</div><div class="code_line">E:\masm32\bin\ml /c /coff /nologo pwi.asm</div><div class="code_line">E:\masm32\bin\Link /SUBSYSTEM:WINDOWS pwi.obj wi.res</div><div class="code_line">Pause</div></ol></div></div></div></div><br>
Вот и всего то. ;) Конечно, нужно не забывать про обработку ошибок,  здесь – это специально не сделано, чтобы нагляднее показать работу wininet функций. Для загрузки огромных сайтов нужно увеличить размер буфера. Также не забываем про указание префикса http протокола - «http://». Ну и конечно, всё зависит от прокси-сервера; приведённый в коде адрес 218.7.13.186:80 , самый быстродейственный на данный момент. <br>
<br>
  Удачи в компиляции.   :rolleyes:]]></description>
        <author>Катька</author>
        <category>Assembler FAQ</category>
      </item>
	
      </channel>
      </rss>
	