Juri Shutenko Personal Homepage. Visual FoxPro.

Функции WinInet, необходимые для работы с Internet в приложениях Visual FoxPro.

Настала пора соединиться с Интернет. Эту потребность обслуживает ряд функций, описание которых приведено ниже. Необходимо отметить, что некоторые функции могут использоваться для операций, где, казалось бы очевидной прямой связи с Интернет, однако, не спешите с выводами. Здесь же приведены описания функций, необходимых для обработки URL - унифицированных локаторов ресурса, используемого в протоколах HTTP и в функциях контроля.

Ниже приведен список функций, рассмотренных в данной статье:

Функция InternetAutodial

Заставляет модем автоматически звонить провайдеру для установки Интернет соединения, используемого по умолчанию.

Хотя уже повсеместно, даже в домашних системах, используются рутеры, обеспечивающие соединение с ADSL каналами, что в свою очередь не требует автодозвона, но в ряде случаев эта функция может быть полезна.

Синтаксис команды регистрации функции для Visual FoxPro приведен ниже:

DECLARE INTEGER InternetAutodial IN wininet.dll; 
    INTEGER dwFlags,; 
    INTEGER dwReserved 

Параметры:

dwFlags
Управляет этой операцией. Параметр может принимать одно из приведенных в таблице значений.

Символьная константаHex-значениеОписание
INTERNET_AUTODIAL_FAILIFSECURITYCHECK 4 Требует завершения вызова с ошибкой, если общий доступ к файлам и принтерам (Ffile and printer sharing) запрещены для операционной системы Microsoft® Windows® 95 или более поздней.
INTERNET_AUTODIAL_FORCE_ONLINE 1 Побуждает online соединение с Internet.
INTERNET_AUTODIAL_FORCE_UNATTENDED 2 Побуждает dial-up соединение без требования внимания пользователя к процессу дозвона.

hwndParent
Handle to the parent window.

Return Values
Returns TRUE if successful, or FALSE otherwise.

Remarks
InternetAutodial does not support double-dial connections, SmartCard authentication, or connections that require registry-based certification.

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.


Функция InternetAutodialHangup

Рассоединяет соединение, установленное с помощью автодозвона.

Синтаксис команды регистрации функции для Visual FoxPro приведен ниже:

DECLARE INTEGER InternetAutodialHangup IN wininet.dll; 
    INTEGER dwReserved 

Параметры:

dwReserved
Параметр зарезервирован и должен быть равен нулю.

Возвращаемые значения
Возвращает TRUE в случае удачного завершения операции, в противном случае FALSE

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.


Функция InternetCheckConnection

Позволяет приложению проверить, может ли быть установлено соединение с Internet.

Синтаксис команды регистрации функции для Visual FoxPro приведен ниже:

DECLARE INTEGER InternetCheckConnection IN wininet; 
    STRING  lpszUrl,; 
    INTEGER dwFlags,; 
    INTEGER dwReserved 

Параметры:

lpszUrl
Указатель на строку с нуль-терминатором, которая содержит URL, используемый для проверки возможности соединения. Это значение может быть NULL.

dwFlags
FLAG_ICC_FORCE_CONNECTION (0x00000001) является единственным флагом, доступным к данному моменту времени. Если этот флаг установлен, он побуждает установить соединение.

dwReserved
Параметр зарезервирован и должен быть равен нулю.

Возвращаемые значения
Возвращает TRUE в случае удачного завершения операции, в противном случае FALSE. Используйте функцию GetLastError для возврата кода ошибки. В случае, если соединение невозможно или недоступна база сокетов GetLastError вернет ERROR_NOT_CONNECTED (2250).

Примечания
Если lpszUrl не установлен в NULL, из него извлекается значение хоста и используется для ping'а указанного хоста.
Если lpszUrl установлен в NULL и имеется запись во внутренней базе данных сервера для ближайшего сервера, значение записи для хоста извлекается и используется для ping'а указанного сервера.

Ниже приведен код примера, использующего рассматриваемую функцию.

CLEAR
#Define FLAG_ICC_FORCE_CONNECTION  0x00000001

Declare Integer InternetCheckConnection In wininet;
   STRING  lpszUrl,;
   INTEGER dwFlags,;
   INTEGER dwReserved
Declare Integer GetLastError In kernel32

Local llCanConnect2Host, lnError, lcHost2Check

? "Checking http://kodu.neti.ee/~juri4"

lcHost2Check="http://kodu.neti.ee/~juri4"+CHR(0)
llCanConnect2Host=;
   InternetCheckConnection(;
      lcHost2Check,;
      FLAG_ICC_FORCE_CONNECTION,;
      0;
   )
? Iif(;
     llCanConnect2Host=0,;
     "Can't connect to host!",
     "Connection may be successfully established!";
  )
lnError=GetLastError()
If lnError !=0
   ? "An error occurs on function call! Error number is:"
   ?? lnError
ENDIF
? 
? "Checking nearest server"

llCanConnect2Host=;
   InternetCheckConnection(;
      .Null.,;
      FLAG_ICC_FORCE_CONNECTION,;
      0;
   )
? Iif(;
     llCanConnect2Host=0,;
     "Can't connect to host!",
     "Connection may be successfully established!";
  )
lnError=GetLastError()
If lnError !=0
   ? "An error occurs on function call! Error number is:"
   ?? lnError
ENDIF

? 
? "Checking unavailable host"

lcHost2Check="http://192.168.0.2/"+CHR(0)
llCanConnect2Host=;
   InternetCheckConnection(;
      lcHost2Check,;
      FLAG_ICC_FORCE_CONNECTION,;
      0;
   )
? Iif(;
     llCanConnect2Host=0,;
     "Can't connect to host!",
     "Connection may be successfully established!";
  )
lnError=GetLastError()
If lnError !=0
   ? "An error occurs on function call! Error number is:"
   ?? lnError
ENDIF

Result of the example code execution

Как видно из примера, рассматриваемую функцию можно использовать для контроля соединения с компьютером (ping'a) локальной сети, если в качестве хоста указать его IP адрес.

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.


Функция InternetCreateUrl

Создает URL (унифицированный локатор ресурса) из его составных частей.

Синтаксис команды регистрации функции для Visual FoxPro приведен ниже:

Declare Integer InternetCreateUrl  In wininet ;
  STRING lpUrlComponents,;
  INTEGER dwFlags,;
  STRING @lpszUrl,;
  INTEGER @lpdwUrlLength

Параметры:

lpUrlComponents
Указатель на структуру URL_COMPONENTS , содержащую компоненты, из которых будет создан URL.

Структура URL_COMPONENTS описана в Microsoft Platform SDK и представляет собой следующее:

typedef struct {
   DWORD dwStructSize;
   LPTSTR lpszScheme;
   DWORD dwSchemeLength;
   INTERNET_SCHEME nScheme;
   LPTSTR lpszHostName;
   DWORD dwHostNameLength;
   INTERNET_PORT nPort;
   LPTSTR lpszUserName;
   DWORD dwUserNameLength;
   LPTSTR lpszPassword;
   DWORD dwPasswordLength;
   LPTSTR lpszUrlPath;
   DWORD dwUrlPathLength;
   LPTSTR lpszExtraInfo;
   DWORD dwExtraInfoLength;
}

dwFlags
Управляет операцией этой функции. Этот параметр может принимать комбинацию значений, приведенных в таблице.

Символьная константаHex-значениеОписание
ICU_ESCAPE 0x80000000 Преобразует все небезопасные символы в их соответствующие escape-последовательности в строке пути, указанного членом lpszUrlPath структуры, а также в строке дополнительной информации, указанной членом lpszExtraInfo URL_COMPONENTS, на которую ссылается параметр lpUrlComponents.
ICU_USERNAME - Устарела — игнорируется.

lpszUrl
Указатель на буффер, который получит созданный URL.

lpdwUrlLength
Указатель на переменную, которая определяет размер буффера lpszUrl, измеряемый в TCHARs. При вызове функции, этот параметр получает размер URL строки, за вычетом символа нуль-терминатора. Если функция GetLastError возвратит ERROR_INSUFFICIENT_BUFFER (122), то этот параметр получит значение числа байтов, требуемых для хранения результата в буффере.

Возвращаемые значения
Возвращает TRUE в случае удачного завершения операции, в противном случае FALSE. Для получения расширенной информации об ошибке, в случае неудачного завершения операции, вызовите функцию GetLastError.

Примечания
Для понимания принципов работы со структурами в Visual FoxPro почитайте перевод статьи Кристофа Ланге и Марка Уилдена - Struct

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.


Функция InternetCanonicalizeUrl

Преобразует URL к общим правилам, что включает в себя преобразование небезопасных символов и пробелов в escape-последовательности.

Синтаксис команды регистрации функции для Visual FoxPro приведен ниже:

Declare Integer InternetCanonicalizeUrl IN wininet; 
    String lpszUrl,; 
    String @lpszBuffer,; 
    Integer pdwBufferLength,; 
    Integer   dwFlags 

Параметры:

lpszUrl
Указатель на строку, содержащую URL, которые требует приведения к общему виду.

lpszBuffer
Указатель на буффер, который получает преобразованный URL.

lpdwBufferLength
Указатель на переменную, которая содержит размер буффера lpszBuffer, измеряемый в символах. Если операция завершилась успешно, этот параметр получает подсчитанное число символов, которые реально скопированы в буффер lpszBuffer, зы вычетом символа нуль-терминатора. Если же вызов функции завершится с ошибкой, то этот параметр получит подсчитанный размер буффера, способный вместить результат, измеряемый в символах, включая символ нуль-терминатора.

dwFlags
Управляет процессом. Если флаги не указаны, функция преобразует все небезопасные символы и мета-последовательности, (такие как \.,\ .., и \...) в escape-последовательности. Этот параметр может иметь одно из приведенных в таблице значений:

Символьная константаHex-значениеОписание
ICU_BROWSER_MODE 0x02000000 Не перекодирует или не кодирует символы, после символов "#" или "?" и не удаляет хвостовые пробелы после "?". Если это значение не определено, полный URL перекодируется с удалением хвостовых пробелов.
ICU_DECODE 0x10000000 Преобразует все %XX последовательности в символы, включая escape-последовательности, до разбора (парсинга) URL.
ICU_ENCODE_PERCENT 0x00001000 Перекодирует любые встретившиеся знаки процента. По умолчанию, знак процента не перекодируется. Это значение возможно в Microsoft® Internet Explorer 5 и более поздних релизов.
ICU_ENCODE_SPACES_ONLY 0x04000000 Перекодирует только пробелы.
ICU_NO_ENCODE 0x20000000 Не преобразует небезопасные символы в escape-последовательности.
ICU_NO_META 0x08000000 Не удаляет мета-последовательности (такие, как "." и "..") из URL.

Возвращаемые значения
Возвращает TRUE в случае удачного завершения операции, в противном случае FALSE.Для получения расширенной информации об ошибке, в случае неудачного завершения операции, вызовите функцию GetLastError. Возможные коды ошибок приведены в таблице:

Символьная константаHex-значениеОписание
ERROR_BAD_PATHNAME 161 URL не может быть приведен к общему виду.
ERROR_INSUFFICIENT_BUFFER 122 URL слишком велик, чтобы вместиться в предоставленный буффер. Параметр lpdwBufferLength устанавлен в размер, в байтах, требуемый для размещения результата - преобразованного URL.
ERROR_INTERNET_INVALID_URL 12005 Недействительный формат URL.
ERROR_INVALID_PARAMETER 87 Имеется недействительная строка, буффер, размер буффера или неверные флаги.

Примечания
In Internet Explorer 4.0 and later, InternetCanonicalizeUrl always functions as if the ICU_BROWSER_MODE flag is set. Client applications that need to canonicalize the entire URL should use either CoInternetParseUrl (with the action PARSE_CANONICALIZE and the flag URL_ESCAPE_UNSAFE) or UrlCanonicalize.

InternetCanonicalizeUrl always encodes by default, even if the ICU_DECODE flag has been specified. To decode without re-encoding, use ICU_DECODE | ICU_NO_ENCODE. If the ICU_DECODE flag is used without ICU_NO_ENCODE, the URL is decoded before being parsed; unsafe characters are then re-encoded after parsing. This function handles arbitrary protocol schemes, but to do so it must make inferences from the unsafe character set.

Applications that call InternetCanonicalizeUrl when using Internet Explorer 3.0 (or when setting the ICU_ENCODE_PERCENT flag for Internet Explorer 5 and later) should track the usage of this function on a particular URL. If unsafe characters in a URL have been converted to escape sequences, using InternetCanonicalizeUrl again on the URL (with no flags) causes the escape sequences to be converted to another escape sequence. For example, a blank space in a URL would be converted to the escape sequence %20. Calling InternetCanonicalizeUrl again on the URL would cause the escape sequence %20 to be converted to the escape sequence %2520, because the % sign is an unsafe character that is reserved for escape sequences and is replaced by the function with the escape sequence %25.

If no flags are specified (dwFlags = 0), the function converts all unsafe characters and meta sequences (such as \.,\ .., and \...) to escape sequences.

Ниже приведен код примера, использующего рассматриваемую функцию.

Clear

#Define ICU_BROWSER_MODE 0x2000000
#Define ICU_DECODE 0x10000000
#Define ICU_ENCODE_PERCENT 0x1000
#Define ICU_ENCODE_SPACES_ONLY 0x4000000
#Define ICU_ESCAPE 0x80000000
#Define ICU_NO_ENCODE 0x20000000
#Define ICU_NO_META 0x8000000
#Define ICU_USERNAME 0x40000000

Declare Integer InternetCanonicalizeUrl In wininet;
   String lpszUrl,;
   String @lpszBuffer,;
   Integer @lpdwBufferLength,;
   Integer dwFlags
Declare Integer GetLastError In kernel32

Local lcURLBefore, lcURLAfter, lnBuffer_size, lnCallReturn, lnError
lcURLBefore = ;
   "www.dotchego.net/search.htm?name=Juri Shutenko&term=full time"
lnBuffer_size = 250
lcURLAfter = Replicate(Chr(0), lnBuffer_size)

lnCallReturn=;
   InternetCanonicalizeUrl(;
   lcURLBefore,;
   @lcURLAfter,;
   @lnBuffer_size,;
   ICU_ENCODE_SPACES_ONLY;
   )

If lnCallReturn !=0
   ? "URL Before: "
   ?? lcURLBefore
   ? "URL After: "
   ?? Strtran(lcURLAfter,Chr(0),'')
Else
   lnError=GetLastError()
   If lnError !=0
      ? "An error occurs on function call! Error number is:"
      ?? lnError
   Endif
Endif

Result of the example code execution

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.


Функция InternetCombineUrl

Объединяет базовый и относительный URL в единый URL. Получаемы результат приводится к общему виду (смотри предыдущую функцию).

Синтаксис команды регистрации функции для Visual FoxPro приведен ниже:

Declare Integer InternetCombineUrl IN wininet; 
    String lpszBaseUrl,;
    String lpszRelativeUrl
    String @lpszBuffer,; 
    Integer @lpdwBufferLength,; 
    Integer dwFlags 

Параметры:

lpszBaseUrl
Указатель на строку, содержащую базовый URL.

lpszRelativeUrl
Указатель на строку, содержащую относительный URL.

lpszBuffer
Указатель на буффер, который получает преобразованный URL.

lpdwBufferLength
Указатель на переменную, которая содержит размер буффера lpszBuffer, измеряемый в символах. Если операция завершилась успешно, этот параметр получает подсчитанное число символов, которые реально скопированы в буффер lpszBuffer, за вычетом символа нуль-терминатора. Если же вызов функции завершится с ошибкой, то этот параметр получит подсчитанный размер буффера, способный вместить результат, измеряемый в символах, включая символ нуль-терминатора.

dwFlags
Управляет процессом. Этот параметр может иметь одно из приведенных в таблице значений:

Символьная константаHex-значениеОписание
ICU_BROWSER_MODE 0x02000000 Не перекодирует или не кодирует символы, после символов "#" или "?" и не удаляет хвостовые пробелы после "?". Если это значение не определено, полный URL перекодируется с удалением хвостовых пробелов.
ICU_DECODE 0x10000000 Преобразует все %XX последовательности в символы, включая escape-последовательности, до разбора (парсинга) URL.
ICU_ENCODE_PERCENT 0x00001000 Перекодирует любые встретившиеся знаки процента. По умолчанию, знак процента не перекодируется. Это значение возможно в Microsoft® Internet Explorer 5 и более поздних релизов.
ICU_ENCODE_SPACES_ONLY 0x04000000 Перекодирует только пробелы.
ICU_NO_ENCODE 0x20000000 Не преобразует небезопасные символы в escape-последовательности.
ICU_NO_META 0x08000000 Не удаляет мета-последовательности (такие, как "." и "..") из URL.

Возвращаемые значения
Возвращает TRUE в случае удачного завершения операции, в противном случае FALSE. Для получения расширенной информации об ошибке, в случае неудачного завершения операции, вызовите функцию GetLastError. Возможные коды ошибок приведены в таблице:

Символьная константаHex-значениеОписание
ERROR_BAD_PATHNAME 161 URL не может быть приведен к общему виду.
ERROR_INSUFFICIENT_BUFFER 122 URL слишком велик, чтобы вместиться в предоставленный буффер. Параметр lpdwBufferLength устанавлен в размер, в байтах, требуемый для размещения результата - преобразованного URL.
ERROR_INTERNET_INVALID_URL 12005 Недействительный формат URL.
ERROR_INVALID_PARAMETER 87 Имеется недействительная строка, буффер, размер буффера или неверные флаги.

Ниже приведен код примера, использующего рассматриваемую функцию.

Clear

#Define ICU_BROWSER_MODE 0x2000000
#Define ICU_DECODE 0x10000000
#Define ICU_ENCODE_PERCENT 0x1000
#Define ICU_ENCODE_SPACES_ONLY 0x4000000
#Define ICU_ESCAPE 0x80000000
#Define ICU_NO_ENCODE 0x20000000
#Define ICU_NO_META 0x8000000
#Define ICU_USERNAME 0x40000000

DECLARE INTEGER InternetCombineUrl IN wininet; 
    STRING    lpszBaseUrl,;
    STRING    lpszRelativeUrl,;
    STRING  @ lpszBuffer,; 
    INTEGER @ lpdwBufferLength,; 
    INTEGER   dwFlags 
Declare Integer GetLastError In kernel32

Local lcBaseURL, lcRelativeURL, ;
lcURLBefore, lcURLAfter, lnBuffer_size, lnCallReturn, lnError
lcBaseURL = "http://www.hot.ee/jurisfox/"
lcRelativeURL="../images/"
lnBuffer_size = 250
lcURLAfter = Replicate(Chr(0), lnBuffer_size)

lnCallReturn=;
   InternetCombineUrl(;
   lcBaseURL,;
   lcRelativeURL,;
   @lcURLAfter,;
   @lnBuffer_size,;
   ICU_BROWSER_MODE;
   )

If lnCallReturn !=0
   ? "URL Before: "
   ?? lcBaseURL +[ and ]+lcRelativeURL
   ? "URL After: "
   ?? Strtran(lcURLAfter,Chr(0),'')
Else
   lnError=GetLastError()
   If lnError !=0
      ? "An error occurs on function call! Error number is:"
      ?? lnError
   Endif
Endif

Result of the example code execution

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.


Функция InternetCrackUrl

Разбирает URL на его составные части.

Синтаксис команды регистрации функции для Visual FoxPro приведен ниже:

Declare Integer InternetCrackUrl IN wininet ; 
   String lpszUrl,;
   Integer dwUrlLength,; 
   Integer dwFlags, ;
   String @lpUrlComponents 

Параметры:

lpszUrl
Указатель на строку, содержащую приведенный к общему виду URL, подлежащий разбору на составные части.

dwUrlLength
Размер строки lpszUrl в TCHARs или 0, если lpszUrl представляет собой ASCIIZ строку.

dwFlags
Управляет операцией. Параметр может принять одно из приведенный в таблице значений

Символьная константаHex-значениеОписание
ICU_DECODE 0x10000000 Converts encoded characters back to their normal form. This can be used only if the user provides buffers in the URL_COMPONENTS structure to copy the components into.
ICU_ESCAPE 0x80000000 Converts all escape sequences (%xx) to their corresponding characters. This can be used only if the user provides buffers in the URL_COMPONENTS structure to copy the components into.

lpUrlComponents
Указатедь на структуру URL_COMPONENTS, которая получает компоненты URL.

Возвращаемые значения
Возвращает TRUE в случае удачного завершения операции, в противном случае FALSE. Для получения расширенной информации об ошибке, в случае неудачного завершения операции, вызовите функцию GetLastError.

Примечания
Требуемые компоненты показываются членами структуры URL_COMPONENTS. Каждый компонент умеет указатель на значение и имеет члена, который хранит длину хранимого значения. Если оба члена - и значение и длина компонента равны нулю, тот этот компонент не возвращается. Если указатель на значение компонента представляет собой "пусто" - NULL, а значение его длины не равно нулю, адрес первого символа соответствующего элемента в строке lpszUrl хранится в указателе, а длина хранится в члене структуры, отвечающем за длину.

Если указатель содержит адрес предоставленного пользователем буффера, член структуру, хранящий длину, должен содержать размер буффера. InternetCrackUrl копирует компонент в буффер, а член структуры, хранящий длину устанавливает в значение длину копируемого компонента, за вычетом 1, учитывающей хвостовой символ нуль терминатора.

Для правильной работы InternetCrackUrl, размер структуры URL_COMPONENTS в байтах, должен храниться в члене структуру dwStructSize.

Описание структуры смотрите в описании функции InternetCreateUrl

Замечание
Не используйте InternetCrackUrl на URL протокола file://, который содержит пробелы, так как значение, возвращаемое в члене dwUrlPathLength структуры URL_COMPONENTS, указываемое с помощью lpUrlComponents слишком велико. Это, опять-таки применимо в случае, с URL "file:// ", который содержит символы пробелов.

Пример:

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.

Требования
Клиент Требует использования Windows "Longhorn", Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98 или Windows 95.
Сервер Требует использования Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server или Windows NT Server 4.0
Версия Требуется наличие установленного Internet Explorer 4.0 или более поздних версий.
Заголовки Объявлены в Wininet.h. Упакованный файл заголовков можно взять здесь
DLL Требуется наличие Wininet.dll

Смотрите последующие части, для получения информации о WinAPI функциях, связанных с получением информации из сети Internet.

Cелектор для быстрого перехода на сайты, связанные с Visual FoxPro.