zoukankan      html  css  js  c++  java
  • Windows API 之 InternetOpen、InternetOpenUrl、InternetReadFile

    InternetOpen:

    Initializes an application's use of the WinINet functions.

    HINTERNET InternetOpen(
      _In_ LPCTSTR lpszAgent,
      _In_ DWORD   dwAccessType,
      _In_ LPCTSTR lpszProxyName,
      _In_ LPCTSTR lpszProxyBypass,
      _In_ DWORD   dwFlags
    );

    Remarks

    InternetOpen is the first WinINet function called by an application. It tells the Internet DLL to initialize internal data structures and prepare for future calls from the application. When the application finishes using the Internet functions, it should call InternetCloseHandle to free the handle and any associated resources.

    InternetOpenUrl:

    Opens a resource specified by a complete FTP or HTTP URL.

    HINTERNET InternetOpenUrl(
      _In_ HINTERNET hInternet,
      _In_ LPCTSTR   lpszUrl,
      _In_ LPCTSTR   lpszHeaders,
      _In_ DWORD     dwHeadersLength,
      _In_ DWORD     dwFlags,
      _In_ DWORD_PTR dwContext
    );

    InternetReadFile:

    Reads data from a handle opened by the InternetOpenUrl, FtpOpenFile, or HttpOpenRequest function.

    BOOL InternetReadFile(
      _In_  HINTERNET hFile,
      _Out_ LPVOID    lpBuffer,
      _In_  DWORD     dwNumberOfBytesToRead,
      _Out_ LPDWORD   lpdwNumberOfBytesRead
    );
    #include <windows.h>
    #include <WinInet.h>
    #include <iostream>
    #pragma comment(lib,"wininet.lib")
    
    using namespace std;
    
    int DownLoader()
    {
        DWORD dwByteRead = 0;
        char szDownBuffer[4096];
        memset(szDownBuffer, 0, 4096);
        BOOL bIntNetReadFile = TRUE;
        BOOL bWriteFile = TRUE;
        DWORD dwWritten = 0;
    
        HINTERNET hintInternetOpen = InternetOpen("Testing", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
        if (!hintInternetOpen)
        {
            InternetCloseHandle(hintInternetOpen);
            return 1;
        }
        HINTERNET hintInternetOpenUrl = InternetOpenUrl(hintInternetOpen, "http://w.x.baidu.com/go/mini/2/10100", NULL, 0, INTERNET_FLAG_RELOAD, 0);
        if (!hintInternetOpenUrl)
        {
            InternetCloseHandle(hintInternetOpen);
            InternetCloseHandle(hintInternetOpenUrl);
            return 1;
        }
    
        HANDLE hCreateFile = CreateFile("D:\BaiDu2.exe", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
        if (hCreateFile == INVALID_HANDLE_VALUE)
        {
            InternetCloseHandle(hintInternetOpen);
            InternetCloseHandle(hintInternetOpenUrl);
            return 1;
        }
        
        while (bIntNetReadFile && bWriteFile)
        {
            bIntNetReadFile = InternetReadFile(hintInternetOpenUrl, szDownBuffer, sizeof(szDownBuffer), &dwByteRead);
            if (!dwByteRead)
            {
                break;
            }
    
            bWriteFile = WriteFile(hCreateFile, szDownBuffer, sizeof(szDownBuffer), &dwWritten, NULL);
            if (!dwWritten)
            {
                break;
            }
        }
        
        InternetCloseHandle(hintInternetOpen);
        InternetCloseHandle(hintInternetOpenUrl);
        return 0;
    }
    
    int main()
    {
        DownLoader();
        system("pause");
        return 0;
    }

    D盘下生成了下载的文件:

     如果改为动态调用

    #include <windows.h>
    #include <iostream>
    #include "dynamicfreetokill.h"
    
    using namespace std;
    
    int main()
    {
    
        cout << hmWinINetDLL << endl;
        if (!hmWinINetDLL)
        {
            cout << "HMDOULE" << endl;
        }
        pfINTERNETCRACKURL pfInternetCrackUrl = (pfINTERNETCRACKURL)GetProcAddress(hmWinINetDLL, "InternetCrackUrlW");
        cout << pfInternetCrackUrl << endl;
        if (!pfInternetCrackUrl)
        {
            cout << "InternetCrackUrlW" << endl;
        }
        pfINTERNETOPEN pfInternetOpen = (pfINTERNETOPEN)GetProcAddress(hmWinINetDLL, "InternetOpenW");
        cout << pfInternetOpen << endl;
        if (!pfInternetOpen)
        {
            cout << "InternetOpenW" << endl;
        }
        pfINTERNETCONNECT pfInternetConnect = (pfINTERNETCONNECT)GetProcAddress(hmWinINetDLL, "InternetConnectW");
        cout << pfInternetConnect << endl;
        if (!pfInternetOpen)
        {
            cout << "InternetConnectW" << endl;
        }
        pfHTTPOPENREQUEST pfHttpOpenRequest = (pfHTTPOPENREQUEST)GetProcAddress(hmWinINetDLL, "HttpOpenRequestW");
        cout << pfHttpOpenRequest << endl;
        if (!pfInternetOpen)
        {
            cout << "HttpOpenRequestW" << endl;
        }
        pfINTERNETSETOPTION pfInternetSetOption = (pfINTERNETSETOPTION)GetProcAddress(hmWinINetDLL, "InternetSetOptionW");
        cout << pfInternetSetOption << endl;
        if (!pfInternetOpen)
        {
            cout << "InternetSetOptionW" << endl;
        }
        pfHTTPSENDREQUEST pfHttpSendRequest = (pfHTTPSENDREQUEST)GetProcAddress(hmWinINetDLL, "HttpSendRequestW");
        cout << pfHttpSendRequest << endl;
        if (!pfInternetOpen)
        {
            cout << "HttpSendRequestW" << endl;
        }
        pfHTTPQUERYINFO pfHttpQueryInfo = (pfHTTPQUERYINFO)GetProcAddress(hmWinINetDLL, "HttpQueryInfoW");
        cout << pfHttpQueryInfo << endl;
        if (!pfInternetOpen)
        {
            cout << "HttpQueryInfoW" << endl;
        }
        pfINTERNETCLOSEHANDLE pfInternetCloseHandle = (pfINTERNETCLOSEHANDLE)GetProcAddress(hmWinINetDLL, "InternetCloseHandle");
        cout << pfInternetCloseHandle << endl;
        if (!pfInternetOpen)
        {
            cout << "InternetCloseHandle" << endl;
        }
        pfINTERNETSETFILEPOINTER pfInternetSetFilePointer = (pfINTERNETSETFILEPOINTER)GetProcAddress(hmWinINetDLL, "InternetSetFilePointer");
        cout << pfInternetSetFilePointer << endl;
        if (!pfInternetOpen)
        {
            cout << "InternetSetFilePointer" << endl;
        }
        pfINTERNETGETLASTRESPONSEINFO pfInternetGetLastResponseInfo = (pfINTERNETGETLASTRESPONSEINFO)GetProcAddress(hmWinINetDLL, "InternetGetLastResponseInfoW");
        cout << pfInternetGetLastResponseInfo << endl;
        if (!pfInternetOpen)
        {
            cout << "InternetGetLastResponseInfoW" << endl;
        }
        pfINTERNETREADFILE pfInternetReadFile = (pfINTERNETREADFILE)GetProcAddress(hmWinINetDLL, "InternetReadFile");
        cout << pfInternetReadFile << endl;
        if (!pfInternetOpen)
        {
            cout << "InternetReadFile" << endl;
        }
        
        FreeLibrary(hmWinINetDLL);
        system("pause");
        return 0;
    }
  • 相关阅读:
    JS 中 == 和 === 区别是什么?
    说说事务的概念,在JDBC编程中处理事务的步骤
    JDBC访问数据库的基本步骤是什么?
    undefined,null 和 undeclared 有什么区别?
    Mybatis框架、什么是 MyBatis、#{}和${}的区别是什么?、Mybatis 动态 sql 是做什么的?都有、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
    什么是CDN?哪些是流行的jQuery CDN?使用CDN有什么好处?
    MyBatis 与 Hibernate 有哪些不同?
    Redis如何做内存优化?
    shiro有哪些组件?
    简述Shiro的核心组件?
  • 原文地址:https://www.cnblogs.com/predator-wang/p/4814236.html
Copyright © 2011-2022 走看看