⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inet.cpp

📁 利用IE接口分析HTML文件
💻 CPP
字号:
/*
    Simple wrapper class for checking validity of a URL
*/
#include <windows.h>
#include <io.h>
#include "inet.h"


WinInet::WinInet()
{
    m_hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
}

WinInet::~WinInet()
{

    if ( m_hInternet != NULL )
    {
        InternetCloseHandle(m_hInternet);
        m_hInternet = NULL;
    }

}

BOOL WinInet::CheckLink(LPCSTR pcszURL)
{
    BOOL    bFound = FALSE;
    DWORD   dwErr;
    char    szURLHostName[INTERNET_MAX_HOST_NAME_LENGTH];
    char    szURLPath[INTERNET_MAX_URL_LENGTH];


    if ( IsConnected() )
    {
        URL_COMPONENTS urlInfo = { sizeof(URL_COMPONENTS) };

        urlInfo.lpszHostName = szURLHostName;
        urlInfo.dwHostNameLength = INTERNET_MAX_HOST_NAME_LENGTH;
        urlInfo.lpszUrlPath = szURLPath;
        urlInfo.dwUrlPathLength = INTERNET_MAX_URL_LENGTH;


        //could be changed to return NOT_A_URL, success or failure
        if ( !InternetCrackUrl(pcszURL, 0, 0, &urlInfo) )
            return FALSE;


        if ( urlInfo.nScheme == INTERNET_SCHEME_HTTP )
        {

            HINTERNET hURL = InternetConnect(m_hInternet, szURLHostName, INTERNET_INVALID_PORT_NUMBER,
                               "", "", INTERNET_SERVICE_HTTP, 0, 0);

            if ( hURL )
            {
                LPSTR szarrAcceptTypes[2] = { "*/*", NULL };

                DWORD  dwFlags = INTERNET_FLAG_RELOAD           | 
                                 INTERNET_FLAG_NO_CACHE_WRITE   | 
                                 INTERNET_FLAG_KEEP_CONNECTION;

                HINTERNET hRequest = HttpOpenRequest(hURL, "GET", szURLPath,
                                                     HTTP_VERSION, "", (LPCSTR*)szarrAcceptTypes, dwFlags, 0);

                if ( hRequest )
                {
                    BOOL b = HttpSendRequest(hRequest, NULL, 0, NULL,0);
                    if ( b )
                    {
                        DWORD dwStatus = 0;
                        DWORD dwLength = sizeof(DWORD);

                        if ( HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, (PVOID)&dwStatus, &dwLength, NULL) )
                            bFound = (dwStatus < HTTP_STATUS_AMBIGUOUS);
                        else
                            dwErr = GetLastError();

                    }

                    InternetCloseHandle(hRequest);
                }

                InternetCloseHandle(hURL);
            }
        }
        else if ( urlInfo.nScheme == INTERNET_SCHEME_FTP )
        {

            HINTERNET hFTP = InternetConnect(m_hInternet, szURLHostName, INTERNET_DEFAULT_FTP_PORT,
                               "", "", INTERNET_SERVICE_FTP, 0, 0);

            if ( hFTP )
            {
                HINTERNET hFile = FtpOpenFile(hFTP, szURLPath, GENERIC_READ, INTERNET_FLAG_RELOAD | FTP_TRANSFER_TYPE_BINARY, 0);

                if ( hFile )
                {
                    bFound = TRUE;
                    InternetCloseHandle(hFile);
                }

                InternetCloseHandle(hFTP);
            }
        }
        else if ( urlInfo.nScheme == INTERNET_SCHEME_FILE )
        {
            // check if the file exists
            bFound = (access(szURLPath, 0x00) == 0x00);
        }
        else
        {
            //unrecognized URL scheme
        }

    }

    return bFound;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -