Win32 中本机 C/C++ 的高级 HTTP 客户端库

2023-11-23

Win32 中是否没有用于本机 C/C++ 的“高级”HTTP 库,或者我只是找错了地方?

我所说的“高级”是指一个 API,它允许我使用与 .NET 框架“大致相同”的抽象级别在 C++ 中执行 HTTP Web 请求/响应(但请注意,使用 C++/CLI 不是我的选择)。

如何在 Win32 中的 C/C++ 中执行类似的操作(使用大约相同数量的代码)而不使用 .NET?作为参考,我提供了一个代码示例来展示如何在 C# 中执行此操作。

byte[] fileBytes = null;
bool successfulDownload = false;
using (WebClient client = new WebClient())
{
    WebProxy proxy = WebProxy.GetDefaultProxy();
    client.Proxy = proxy;
tryAgain:
    try
    {
        fileBytes = client.DownloadData(fileUrl);
        successfulDownload = true;
    }
    catch (WebException wEx)
    {
        if (wEx.Response != null && wEx.Response is HttpWebResponse)
        {
            string username = null, password = null;
            bool userCanceled = false;
            HttpStatusCode statusCode = ((HttpWebResponse)wEx.Response).StatusCode;
            switch (statusCode)
            {
                case HttpStatusCode.ProxyAuthenticationRequired:
                    // This is just a convenience function defined elsewhere
                    GetAuthenticationCredentials(fileUrl, true,
                        out username, out password, out userCanceled);
                    if (!userCanceled)
                    {
                        client.Proxy.Credentials = new NetworkCredential(username, password);
                        goto tryAgain;
                    }
                    break;
                case HttpStatusCode.Unauthorized:
                    // This is just a convenience function defined elsewhere
                    GetAuthenticationCredentials(fileUrl, false,
                        out username, out password, out userCanceled);
                    if (!userCanceled)
                    {
                        client.Credentials = new NetworkCredential(username, password);
                        goto tryAgain;
                    }
                    break;
            }
        }
    }
}

Win32 提供了Internet*功能。

http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx

你需要做一个(IIRC,我已经 10 多年没有接触过这些 API)InternetOpenURL and InternetReadFile.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win32 中本机 C/C++ 的高级 HTTP 客户端库 的相关文章

  • C# 锁(mylocker) 不起作用

    我有很多 Web 服务调用 异步 在回调中 我会将结果绘制到 Excel 中 我想同步绘图方法 所以我使用以下内容 但是 从我在 Visual Studio 中追踪到 每次 lock locker 都会成功 并且有许多线程运行clearco
  • 在单个 C# 泛型方法中返回可为 null 和 null?

    C 泛型方法是否可以返回对象类型或 Nullable 类型 例如 如果我有一个安全的索引访问器List我想返回一个值 稍后我可以使用以下任一方法检查该值 null or HasValue 目前我有以下两种方法 static T SafeGe
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 枚举 EMF 时丢失文本

    我在列举发票 emf http www mediafire com kdjwvvo7odyvwa6并将其复制到另一个但文本丢失了 令人惊讶的是 当我将其输出到窗口时 它绘制得非常完美 int CALLBACK EnhMetaFileProc
  • 如何从 webmethod 向 AJAX 调用返回异常?

    我回来了List
  • 确保 unsigned int/long 始终在 C# 中的检查上下文中执行

    有没有人觉得奇怪 uint 和 ulong 的默认上下文是未检查的 而不是检查的 因为它们旨在表示永远不能为负的值 因此 如果某些代码试图违反该约束 在我看来 自然且首选的行为是抛出异常 而不是返回最大值 这很容易使重要数据处于无效状态并且
  • 如何正确实现带有 close 方法的处置模式(CA1063)

    框架设计指南 第二版 第 327 页 说 考虑提供方法Close 除了Dispose 如果接近 是该领域的标准术语 这样做时 重要的是使 Close 实现与Dispose并考虑实施IDisposable Dispose方法明确 因此 按照提
  • 如何修复 TcpClient Ip 标头错误校验和

    我正在使用 System Net Sockets TcpClient 类 但每当我通过网络发送自定义数据包时 我都会在wireshark捕获上看到错误的校验和 我该如何修复它 问题是您在网络接口上设置了校验和卸载 这会导致您的网卡计算校验和
  • 如何获取 PropertyGrid 的单元格值 (c#)?

    如何在 C 中获取属性网格项和项的值 例如 Name Ali LastName Ahmadi Name 和 LastName 是 propertygrid 的 2 个属性 PropertyGrid只是对象的组件模型表示的视图 我会说 查看组
  • 用于轻松动态反射的 C# 库

    是否有任何库 例如开源项目等 可以更轻松地使用复杂的反射 例如动态创建对象或类 检查实例等 Thanks 有一个LinFu http www codeproject com KB cs LinFuPart1 aspx可用的库除了反射之外还可
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • 为什么这段代码不会产生编译错误?

    template
  • cmake 包括其他目录中的 h 文件

    我在 cmake 项目下进行测试时遇到问题 我的项目是这样安排的 TerrainMap PointAccumulator heightQuadGrid Test 在 TerrainMap 目录中 CMakeLists txt 文件简单地概述
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • XSD、泛型和 C# 类的困境

    我有以下简单的 XSD 文件
  • 比较 C# 中的对象属性[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 通过开源 PCL 使用 API 查看 3D 点云

    我使用 ToF 飞行时间 相机来获取 XYZ 格式的深度数据 为了实现 3D 点云的可视化目的 我想使用开源 PCL 提供的 API 网址为http pointclouds org documentation tutorials pcl v
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么

随机推荐

  • 错误 TS2339:类型“Observable”上不存在属性“catchError”

    这是我在 book service ts 中的代码 import Injectable from angular core import Http Response from angular http import Observable f
  • 在asp.net MVC中不使用@HTML.Beginform并使用Jquery(ajax)发布表单

    如何在不使用 HTML Beginform 并使用 JQuery Ajax 的情况下填写表单 现在我尝试过 var postData form1 username form2 password ajax type POST url Cont
  • IEnumerable.Last() 是否针对 List 进行了优化?

    我有一个List
  • 查找图中的最小割边

    给定一个随机无向图 我必须找到 瓶颈边 编辑 最小切割边 才能从一个顶点到达另一个顶点 我所说的 瓶颈边缘 编辑 最小切割边缘 假设我有以下无向图 A B C D E F G H 为了从 A 到 H 独立于所选路径边 必须始终遍历 BE 和
  • python 中的会话身份验证

    使用来自的会话requestspython 中的模块 似乎会话仅在第一个请求时发送授权 我不明白为什么会发生这种情况 import requests session requests Session session auth u user
  • 为什么点符号只能引用表格?

    这似乎是一个简单的初学者问题 但我无法在任何地方找到答案 假设我有这样的 HTML
  • Swift 中的字符串插值

    swift 中的函数采用 Swift 中的任何数字类型 Int Double Float UInt 等 该函数将数字转换为字符串 函数签名如下 func swiftNumbers
  • 如何在 JQuery 中将 json 响应读取为名称值对

    我想在 JQuery 代码中将 json 响应读取为名称和值对 以下是我从 java 代码返回的示例 JSON 响应 String jsonResponse name1 value1 name2 value2 在我的 JQuery 中 如果
  • Python,numpy 排序数组

    我正在使用 numpy 并有一个包含一些值的数组 ndarray 类型 该数组的形状为 1000x1500 我重新塑造了它 brr np reshape arr arr shape 0 arr shape 1 当我尝试时 brr rever
  • 使用 tSQLt 测试时如何回滚事务

    我最近正在调用一个代码中包含 rasierror 的过程 raiserror 位于 try catch 块中 BEGIN TRAN 也位于 raiserror 之后的同一个 try catch 块中 Catch 块旨在在事务中发生错误时回滚
  • 扩展范围的继续和中断

    是否有可能continue or break拥有比当前运行的循环更大的范围 在下面的示例中 我希望在以下情况下继续执行外部 for 循环 expr是 true 尽管它是在内部 for 循环中调用的 因此两者都不是 some inner co
  • 验证失败时防止焦点集中在字段上

    我经常使用这个 jQuery 验证插件验证表单 效果很好 真的很满意 但是当您在表单上按 提交 时 它会自动将焦点放在无效的字段上 在我当前的项目中 我有一个非常长的表单 当您按下提交按钮时 您的滚动条会跳到该字段 可能是因为它获得焦点 但
  • 在 C# 中,如何在运行时检查对象是否属于某种类型?

    在 C 中 如何在运行时检查对象是否属于某种类型 您可以使用is关键词 例如 using System class CApp public static void Main string s fred long i 10 Console W
  • 如何在Excel中过滤多个条件?

    我正在尝试过滤多个条件 但我看到 过滤器 选项只有 2 个 AND OR 选项字段 我有一个充满链接的专栏 我想提取其中包含这些的所有行 pdf doc docx xls xlsx rtf TXT csv pps 有没有好的方法可以做到这一
  • Java读取wav文件

    我想用 Java 读取 wav 文件 并且将使用 K means 对它们进行分类 我怎样才能读取Java中的wav文件并将它们分配到一个数组或类似的东西 你可以建议它的想法 来对它们进行分类 EDIT 我想使用 API 来读取 wav 文件
  • 如何像 UNIX 中的 tar 一样在 Perl 中归档目录?

    我想归档一个目录 我不知道是否可以调用 我想压缩一个目录 我想在解压时保留另一端的访问权限 我应该用 perl 解决这个问题 感谢您的回复 但我为什么要求使用 Perl 来做到这一点是因为我希望它独立于平台 我想将一个大文件传输到多台机器
  • 如何克隆到非空目录?

    我有目录 A 和与目录 B 匹配的文件 目录 A 可能还有其他需要的文件 目录 B 是一个 git 存储库 我想将目录 B 克隆到目录 A 但 git clone 不允许我这样做 因为该目录非空 我希望它只是克隆 git 并且因为所有文件都
  • 如何使用 python 将 wav 实时转换为 mp3?

    我有如下所示的代码来从麦克风获取音频 import pyaudio p pyaudio PyAudio CHUNK 1024 FORMAT pyaudio paInt16 CHANNELS 2 RATE 1024 10 RECORD SEC
  • 范围最小查询 方法(从树到受限 RMQ)

    所以 我读了thisTopCoder 关于 RMQ 范围最小查询 的教程 我有一个很大的问题 在他介绍的部分方法 到目前为止我能理解的是 整个方法实际上使用了中介绍的方法稀疏表 ST 算法 从 LCA 减少到 RMQ and 从 RMQ 到
  • Win32 中本机 C/C++ 的高级 HTTP 客户端库

    Win32 中是否没有用于本机 C C 的 高级 HTTP 库 或者我只是找错了地方 我所说的 高级 是指一个 API 它允许我使用与 NET 框架 大致相同 的抽象级别在 C 中执行 HTTP Web 请求 响应 但请注意 使用 C CL