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


相关推荐

  • RT Thread FinSH组件

    RT Thread FinSH组件FinSH入口rt_components_init();voidmain_thread_entry(void*parameter){externintmain(void);#ifdefRT_USING_COMPONENTS_INIT/*RT-Threadcomponentsinitialization*/rt_components_init();#endif/*RT_USING_COMPONENTS_INIT*/#ifdefRT_US

    2022年5月21日
    41
  • 贪吃蛇开源代码_java贪吃蛇小程序代码

    贪吃蛇开源代码_java贪吃蛇小程序代码Python实践小游戏——贪吃蛇程序分析+源码基于Windows控制台,不使用pygame等gui工具

    2022年8月10日
    5
  • hikaripool信息_HikariPool源码(四)资源状态[通俗易懂]

    hikaripool信息_HikariPool源码(四)资源状态[通俗易懂]Java极客|作者/铿然一叶这是Java极客的第55篇原创文章1.本章目的了解池资源的状态,以及状态如何变迁,用于池化资源设计参考。2.HikariPool资源核心类回顾HikariPool资源相关的类如下:类说明:类职责HikariPool资源池,客户端资源操作的入口。ConcurrentBag通用的并发包工具。CopyOnWriteArrayList一个列表,用于存储资源,…

    2022年6月23日
    23
  • 数据库查询优化——Mysql索引

    数据库查询优化——Mysql索引

    2020年11月12日
    297
  • s一般怎么称呼自己的m_从你对四种新疆夏至美食的称呼,就能判断你是不是新疆人…

    s一般怎么称呼自己的m_从你对四种新疆夏至美食的称呼,就能判断你是不是新疆人…夏至到了,看着晴朗的天空,体味着周围不断蒸腾起的热浪,尤其是内里的燥热难当。闭起眼来,问自己的内心的胃,现在最想吃的、喝的是什么?不承想,竟然是最具有新疆特色的几样美味。而且,我今天不准备说怎么吃,只说怎么叫!意不意外,新鲜不新鲜!第一种美味——冰镇红乌苏你一定会认为我要说大盘鸡?哈哈哈,太土了吧!也不知道从什么时候起,乌苏啤酒,成为了流行全国的夏日最火啤酒。如果你说“乌苏啤酒”恭喜你,你要被小轻…

    2022年6月23日
    35
  • 京东自助代挂_京东任务代挂

    京东自助代挂_京东任务代挂京东自动签到-代挂效果展示说明效果展示说明JD签到网站:点我进入京东签到网站    JD签到,东东农场等活动自动帮做,每天都会自动浇水。每天都有200-1000豆豆不等入账,相当于坐等收钱,JD只要出了新活动网站都会同步更新,不需要担心任何活动,每天都会帮你自动完成。…

    2022年9月16日
    2

发表回复

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

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