Windows API 之 InternetOpen、InternetOpenUrl、InternetReadFile

Windows API 之 InternetOpen、InternetOpenUrl、InternetReadFileInternetOpen:Initializesanapplication'suseoftheWinINetfunctions.HINTERNETInternetOpen(_

大家好,又见面了,我是你们的朋友全栈君。

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盘下生成了下载的文件:

<span role="heading" aria-level="2">Windows API 之 InternetOpen、InternetOpenUrl、InternetReadFile

 如果改为动态调用

#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;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155120.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • biztalk什么意思_aide教程网

    biztalk什么意思_aide教程网BizTalk开发系列(二十六) 使用Web Service

    2022年4月21日
    61
  • 微信小程序的面试题_小程序面试题汇总

    微信小程序的面试题_小程序面试题汇总小程序面试题简单描述下微信小程序的相关文件类型?一、WXML(WeiXinMarkupLanguage)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。内部主要是微信自己定义的一套组件。与html差不多。二、WXSS(WeiXinStyleSheets)是一套样式语言,用于描述WXML的组件样式,与css差不多二、js逻辑处理,…

    2022年4月19日
    64
  • CSS3选择器02—CSS3部分选择器

    该部分主要为CSS3新增的选择器接上一篇CSS(CSS3)选择器(1)一.通用兄弟选择器:24:E~F,匹配任何E元素之后的同级F元素。二.属性选择器:25:E[att^=val]

    2022年3月25日
    55
  • VBA listview控件「建议收藏」

    VBA listview控件「建议收藏」
    1、在Listview控件中,用ColumnHeaders对象来操作列,而添加新的列可以用ColumnHeaders对象的ADD方法。具体如下: 
    ListView1.ColumnHeaders.Add序号,唯一的字符串标识,列标显示文字,列宽,列的内容对齐方式,所使用的图标序号。
    对齐方式有:lvwColumnLeft 、 lvwColumnCenter、lvwColumnRight                                            

    2022年7月16日
    16
  • python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」

    python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」Python的学习者中,有相当一部分是冲着爬虫去的。因为爬虫可以帮你解决很多工作和生活中的问题,节约你的生命。不过Python还有一个神秘而有趣的应用领域,那就是量化交易。量化交易,就是以数学模型替代人的主观判断来制定交易策略。通常会借助计算机程序来进行策略的计算和验证,最终也常直接用程序根据策略设定的规则自动进行交易。Python由于开发方便,工具库丰富,尤其科学计算方面的支持很强大,所…

    2022年10月8日
    1
  • pic单片机流水灯循环右移c语言,PIC单片机流水灯程序[通俗易懂]

    pic单片机流水灯循环右移c语言,PIC单片机流水灯程序[通俗易懂]#INCLUDE”P16F877.inc”;org00h;gotoa1;org0ch;;******************************************;主程序段;******************************************a1movlw8;循环次数movwf40h;movlwB’01111111′;初显示值movwf…

    2022年5月1日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号