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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阿里云异构计算产品是如何保障双11业务的

    阿里云异构计算产品是如何保障双11业务的

    2021年6月17日
  • String字符串转JSONObject顺序不对,解决「建议收藏」

    String字符串转JSONObject顺序不对,解决「建议收藏」StringgoodsSpec={“21445″:”套装德绒紫”,”21447″:”S”}普通模式JSONObjectjsonObject=JSONObject.parseObject(json);或JSONObjectgoodsSpecs=jsonObject.getJSONObject(goodsSpec);转换返回{“21447″:”S”,”21445″:”套装德绒紫”}原因JsonObject内部是用Hashmap来存储的,所以输出是按key的排序来的,如果要让J

    2022年8月23日
  • 更新本地DNS缓存列表[通俗易懂]

    更新本地DNS缓存列表[通俗易懂]更新本地DNS缓存列表当我们以域名形式访问过目标网站后,该网站的域名和IP地址对应关系就会自动保存到本地工作站的DNS缓存列表中,日后IE浏览器会优先访问DNS缓存列表中的信息,不过一旦此时目标站点的域名和IP地址对应关系发生变动的话,DNS缓存列表中的对应解析记录不会跟着同步变化,那么日后我们再次以域名形式访问目标站点时就容易发生DNS解析不成功的故障。这个时候,…

    2022年5月5日
  • UBUNTU20.04 安装显卡驱动_ubuntu18.04安装教程

    UBUNTU20.04 安装显卡驱动_ubuntu18.04安装教程第一步下载Qt5.12.9安装包使用清华镜像进行下载:https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/Qt5.12.9百度云链接:https://pan.baidu.com/s/1dpJfoAyzR5Wm0FrFc_ZuHA提取码:t5jt第二步安装Qt进入安装包路径cd~/下载安装包赋权限sudochmod+xqt-opensource-linux-x64-5.12.9.run断开无线网开始安装。sudo./

    2022年10月9日
  • Cookies的实际存储位置

    Cookies的实际存储位置

    2021年10月12日
  • golang 大数据平台_golang 如何处理大数据[通俗易懂]

    golang 大数据平台_golang 如何处理大数据[通俗易懂]Golang被证明非常适合并发编程,goroutine比异步编程更易读、优雅、高效。本文提出一个适合由Golang实现的Pipeline执行模型,适合批量处理大量数据(ETL)的情景。想象这样的应用情景:(推荐学习:go)从数据库A(Cassandra)加载用户评论(量巨大,例如10亿条);根据每条评论的用户ID、从数据库B(MySQL)关联用户资料;调用…

    2022年5月23日

发表回复

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

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