如何使用 C++ 保存网页? Windows 或 Linux 系统

     2023-02-22     186

关键词:

【中文标题】如何使用 C++ 保存网页? Windows 或 Linux 系统【英文标题】:How do I save a webpage using C++? Windows or Linux System 【发布时间】:2015-04-09 19:34:11 【问题描述】:

我需要知道如何在 Windows 和/或 Linux 上使用 C++ 保存网页。

第 1 步)这是我当前打开网页的代码:

ShellExecute(NULL, "open", websiteURL, NULL, NULL, SW_SHOWNORMAL);

第 2 步)这是我将打开的网页保存为 .txt 的步骤

Your help here.

第 3 步)这是我在将网页另存为 .txt 后关闭网页的尝试;但是,它目前不起作用。

ShellExecute(NULL, "close", websiteURL, NULL, NULL, SW_SHOWNORMAL);

【问题讨论】:

Saving a webpage to disk using C++的可能重复 @Slizzered 是的,涉及 curl,这项工作可以轻松完成。 我自己会打电话给SaveWebPageToDisk(char *url, char *savePath); @mah 如何使用 SaveWebPageToDisk?你能提供更多关于如何设置的细节吗? SaveWebPageToDisk() 的实际定义是什么? 【参考方案1】:

这是 Windows 版本。注意,Windows 函数是 Unicode UTF-16,但输出文件可以是 ANSI 或 UTF-8。

#include <iostream>
#include <string>
#include <fstream>
#include <Windows.h>
#include <WinINet.h>

#pragma comment(lib, "WinINet.lib")

int main()

    std::ofstream fout(L"c:\\test\\_test.htm", std::ios::binary);
    std::wstring url = L"https://www.***.com/questions/29547368";
    HINTERNET hopen = InternetOpen(L"MyAppName", 
                            INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if(hopen)
    
        DWORD flags = INTERNET_FLAG_DONT_CACHE;
        if(url.find(L"https://") == 0) 
            flags |= INTERNET_FLAG_SECURE;
        HINTERNET hinternet = InternetOpenUrl(hopen, url.c_str(), NULL, 0, flags, 0);
        if(hinternet)
        
            char buf[1024];
            DWORD received = 0;
            while(InternetReadFile(hinternet, buf, sizeof(buf), &received))
            
                if(!received) break;
                fout.write(buf, received);
            
            InternetCloseHandle(hinternet);
        
        InternetCloseHandle(hopen);
    
    return 0;

【讨论】:

我尝试编译此代码并收到以下错误。 $ g++ test.cpp test.cpp: In function ‘int main()’: test.cpp:57:23: error: ‘printf’ is not declared in this scope printf(src.c_str()); 我把它改成了cout并添加了头文件&lt;iostream&gt; @bamrak-shemirani 我是否缺少库,本地文件夹中的标题?编译时出现以下错误: $ g++ test.cpp /tmp/ccVUR0Zt.o:test.cpp:(.text+0x72): undefined reference to WinHttpOpen' /tmp/ccVUR0Zt.o:test.cpp:(.text+0x72): relocation truncated to fit: R_X86_64_PC3 2 against undefined symbol WinHttpOpen' 我用 Visual Studio 编译了这段代码,我感觉如果不做很多修改它就不会在 gcc 上运行。也许 gcc 有不同的解决方案。 @bamrak-shemirani 我刚刚用 Visual Studio 成功编译并运行了它。它似乎已将 HTML 代码复制到我的控制台。是否可以修改它,使其简单地将网页内容“另存为”作为“.txt”到请求的文件夹?

C++ cURL - 如何将完整的网页保存到文件中?

】C++cURL-如何将完整的网页保存到文件中?【英文标题】:C++cURL-howtosaveafullwebpagetoafile?【发布时间】:2014-03-1605:50:14【问题描述】:我正在尝试使用C++(VisualStudio2013)将完整网页保存到.txt文件中。我正在使用卷曲。一切正常,但... 查看详情

在 Windows 中编程 C 或 C++ 时如何操作 GUID?

】在Windows中编程C或C++时如何操作GUID?【英文标题】:HowdoyoumanipulateGUID\'swhenprogrammingCorC++inWindows?【发布时间】:2008-09-2617:18:32【问题描述】:在使用C或C++进行Windows编程时如何操作GUID?【问题讨论】:不要在问题中回答问题。... 查看详情

在 Windows 中,如何使用 C++ 或 C# 在属于另一个进程的窗口中突出显示文本?

】在Windows中,如何使用C++或C#在属于另一个进程的窗口中突出显示文本?【英文标题】:InWindowshowtogethighlightedtextinawindowthatbelongstoanotherprocessusingC++orC#?【发布时间】:2013-08-3014:28:24【问题描述】:它在一个C++翻译程序中。当用户... 查看详情

如何使用 C 或 C++ 将选项添加到 Windows 资源管理器上下文菜单?

】如何使用C或C++将选项添加到Windows资源管理器上下文菜单?【英文标题】:HowareoptionsaddedtoWindowsexplorercontextmenususingCorC++?【发布时间】:2010-04-2219:49:44【问题描述】:例如,当我在资源管理器窗口中单击鼠标右键时,我会看到... 查看详情

在 Windows 上使用 C 或 C++ 更改系统时间

】在Windows上使用C或C++更改系统时间【英文标题】:ChangesystemtimeusingCorC++onWindows【发布时间】:2013-01-3102:19:05【问题描述】:如何使用C或C++在Windows上更改系统时间?我搜索了互联网,但找不到。点击此链接:http://learnhacking.in/c-p... 查看详情

如何使用 PowerShell 或 C# 将网页保存到 HTML 文件中?

】如何使用PowerShell或C#将网页保存到HTML文件中?【英文标题】:HowtosaveawebpageintoaHTMLfilewithPowerShellorC#?【发布时间】:2018-05-1505:37:17【问题描述】:我有以下link,当我通过Chrome打开链接然后右键单击该页面然后选择“另存为”以... 查看详情

如何使用 C++ 在 Windows 中获取 MAC 地址? [关闭]

】如何使用C++在Windows中获取MAC地址?[关闭]【英文标题】:HowtogetMACAddressinWindowswithC++?[closed]【发布时间】:2012-11-1818:09:35【问题描述】:我需要一些有关MAC地址的帮助。我必须通过在C++中使用一些代码来获得它,所以有人可以... 查看详情

如何使用 C++ 在 Windows 中使用更改日志查找文件修改

】如何使用C++在Windows中使用更改日志查找文件修改【英文标题】:HowtofindthefilemodificationusingchangeJournalinwindowsusingc++【发布时间】:2017-11-2905:56:16【问题描述】:我想在Windows中使用ChangeJournal查找文件或目录更改。我想要一个完整... 查看详情

如何使用 Windows 运行时使用 C# 实现 C++ API?

】如何使用Windows运行时使用C#实现C++API?【英文标题】:HowtousetheWindowsRuntimetoimplementaC++APIusingC#?【发布时间】:2019-02-2508:00:38【问题描述】:我正在使用具有插件系统的本机C++应用程序,它将在.dll上通过LoadLibrary()/GetProcAddress()... 查看详情

如果我有一个小型转储文件或异常结构,我如何获得 winqual 使用的“桶 id”? (Windows c++)

...储文件或异常结构,我如何获得winqual使用的“桶id”?(Windowsc++)【英文标题】:HowdoIgetthe"bucketid"thatwinqualusesifIhaveaminidumpfileorexceptionstructure?(Windowsc++)【发布时间】:2011-06-0513:46:30【问题描述】:关于SO有几个相关的问题-... 查看详情

在 windows 中使用互斥锁进行进程间同步(win32 或 C++)

】在windows中使用互斥锁进行进程间同步(win32或C++)【英文标题】:Interprocesssynchronizationusingmutexinwindows(win32orC++)【发布时间】:2012-10-1110:06:28【问题描述】:我想在2个进程之间建立线程同步。基本上一个线程在App1.exe中运行,... 查看详情

如何从 Windows 上的 c++ 控制台应用程序打印 UTF-8

】如何从Windows上的c++控制台应用程序打印UTF-8【英文标题】:HowdoIprintUTF-8fromc++consoleapplicationonWindows【发布时间】:2010-11-2503:42:49【问题描述】:适用于在英文Windows(XP、Vista或7)上使用VisualStudio2008编译的C++控制台应用程序。是... 查看详情

Windows 是不是进入睡眠模式或使用 C++ 休眠? [复制]

】Windows是不是进入睡眠模式或使用C++休眠?[复制]【英文标题】:IsWindowsenteringsleepmodeorhibernatingwithC++?[duplicate]Windows是否进入睡眠模式或使用C++休眠?[复制]【发布时间】:2012-08-1400:52:58【问题描述】:可能重复:Howtodetectifwindows... 查看详情

如何在 C++ 中获取操作系统名称?

...C++中操作系统的名称。我尝试使用GetVersionExA,这是一种Windows方法。但是这种方法已被弃用。有没有办法恢复操作系统的名称,例如“Windows10Enterprise”,这要归功于标准c++或windows或Qt...?【问题讨论】:你读 查看详情

以编程方式将网页 HTM 保存为文本文件

...可以将此文件保存到我的电脑中,保存类型为text。但是如何使用c++或c#以编程方式保存它?【问题讨论】:为什么 查看详情

Windows COM C++ - 使用删除或释放

】WindowsCOMC++-使用删除或释放【英文标题】:WindowsCOMC++-UsingdeleteorRelease【发布时间】:2017-01-2422:39:40【问题描述】:我想问一个简单的问题,我有一个Direct2D工厂,当我准备清理时,我会调用delete还是使用releasemember?我看到一些... 查看详情

在 windows 中,如何使用 c++ 检查端口是不是免费

】在windows中,如何使用c++检查端口是不是免费【英文标题】:inwindows,howtocheckportisfreeornotbyusingc++在windows中,如何使用c++检查端口是否免费【发布时间】:2014-09-1206:43:26【问题描述】:在windows中,如何使用c++检查端口是否空闲(... 查看详情

如何使用 c++ 在 tensorflow 中保存模型

】如何使用c++在tensorflow中保存模型【英文标题】:Howtosaveamodelintensorflowbyusingc++【发布时间】:2017-11-1909:55:45【问题描述】:如何使用c++在Tensorflow中保存模型?我在谷歌和百度上搜索过,但没有找到任何解决方案。然后我看了ten... 查看详情