首页 > 其他分享 >libcurl.net入门使用

libcurl.net入门使用

时间:2024-11-13 17:19:55浏览次数:1  
标签:入门 libcurl easy Curl CURLoption net CURLOPT SetOpt

libcurl.net入门使用

关于libcurl.net

一个引用libcurl.dll并封装为.NET使用的Curl库,方便在.NET应用程序里面执行Curl命令,没有其他库依赖,只是对libcurl.dll的封装和引用。
在大多数情况下,我们可以或者比较容易获取Web请求的Curl格式的请求内容,因此该库可以比较方便地对已知Curl命令进行.NET的程序化转换使用。

安装

因为libcurlx86x64版本,因此libcurl.NET也有两个版本,在Visual StudioNuGet仓库搜索libcurl.NET,然后根据自己的应用选择安装x86x64对应的版本。

使用流程

  1. libcurl库引用初始化,全局的,整个程序只需要调用一次:
Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
  1. 创建封装的类对象,后续通过该对象执行Curl命令:
var easy = new Easy();
  1. 设置Curl参数,包括地址、请求头、请求参数等,统一使用函数easy.SetOpt,该函数第一个为枚举值的参数类型,第二个参数为对应的参数值:
easy.SetOpt(CURLoption.CURLOPT_USERPWD, UserName + ":" + UserPassword);
easy.SetOpt(CURLoption.CURLOPT_URL, url);
easy.SetOpt(CURLoption.CURLOPT_ENCODING, url);
  1. 执行Curl命令,根据返回代码判定操作结果
var result = easy.Perform();
Log("curl操作完成,结果", pr == CURLcode.CURLE_OK ? "成功" : "失败-" + pr.ToString());
  1. 销毁封装的类对象
easy.Dispose();
  1. 释放清理libcurl库的引用
Curl.GlobalCleanup();

使用示例

bool TryCurlWithUploadFile(string url)
{
    FileStream fs = null;
    try
    {
        // 读取文件
        fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);

        // 需要声明:using SeasideResearch.LibCurlNet;
        Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
        var easy = new Easy();

        // 设置网址
        easy.SetOpt(CURLoption.CURLOPT_URL, url);
        // 设置授权所需的用户名和密码
        easy.SetOpt(CURLoption.CURLOPT_USERPWD, UserName + ":" + UserPassword);

        // 上传的文件信息
        var readFunc = new Easy.ReadFunction(OnReadData);
        easy.SetOpt(CURLoption.CURLOPT_READFUNCTION, readFunc);
        easy.SetOpt(CURLoption.CURLOPT_READDATA, fs);
        easy.SetOpt(CURLoption.CURLOPT_UPLOAD, true);
        easy.SetOpt(CURLoption.CURLOPT_INFILESIZE, fs.Length);

        // 可选,显示调试信息
        var dbgFunc = new Easy.DebugFunction(OnDebug);
        easy.SetOpt(CURLoption.CURLOPT_DEBUGFUNCTION, dbgFunc);
        easy.SetOpt(CURLoption.CURLOPT_VERBOSE, true);

        // 可选,显示进度
        var prgFunc = new Easy.ProgressFunction(OnProgress);
        easy.SetOpt(CURLoption.CURLOPT_PROGRESSFUNCTION, dbgFunc);

        // 设置不校验SSL
        easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYHOST, 0);
        easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYPEER, 0);

        // 执行命令
        var pr = easy.Perform();
        if(pr != CURLcode.CURLE_OK)
        {
            Log("Curl请求失败,原因:", easy.StrError(pr));
        }
        else
        {
            Log("Curl请求成功");
        }
        easy.Dispose();
        return true;
    }
    catch(Exception e)
    {
        Log("Curl异常:", e.Message);
        return false;
    }
    finally
    {
        // 清理
        fs?.Close();
        Curl.GlobalCleanup();
    }
}

public Int32 OnReadData(byte[] buf, Int32 size, Int32 nmemb, object ext)
{
    var fs = (FileStream)ext;
    return fs.Read(buf, 0, size * nmemb);
}

public void OnDebug(CURLINFOTYPE infoType, string message, object extraData)
{
    if(infoType == CURLINFOTYPE.CURLINFO_DATA_IN && !string.IsNullOrWhiteSpace(message))
    {
        Log("Curl<", message);
    }
}

public int OnProgress(object extraData, double dlTotal, double dlNow, double ulTotal, double ulNow)
{
    Log($"Curl< Progress info: {dlNow}/{dlTotal} {ulNow}/{ulTotal}");
    return 0;
}

标签:入门,libcurl,easy,Curl,CURLoption,net,CURLOPT,SetOpt
From: https://www.cnblogs.com/arbboter/p/18544387

相关文章

  • 【阅读文献笔记】TransXNet: Learning Both Global and LocalDynamics with a Dual Dy
    从经典的ViTs说起,即基于MHSA构建远距离建模实现全局感受野的覆盖,但缺乏像CNNs般的归纳偏差能力。因此在泛化能力上相对较弱,需要大量的训练样本和数据增强策略来弥补。针对这个问题,SwinTransformer率先引入了移位窗口自注意力来引入归纳偏差并减少计算成本。然而,作者......
  • .net动态类ExpandoObject及使用场景
    它位于System.Dynamic命名空间中。与普通的C#类型不同,ExpandoObject允许在运行时动态地添加、删除或修改其成员(属性或方法)。这使得它在一些需要高度灵活性和动态性的数据结构场景中非常有用。ExpandoObject的基本特性动态成员访问:可以在运行时添加或移除属性和方法。弱类型......
  • kubernetes镜像拉取失败解决方法 ErrImagePull
    被这个问题卡住了最少一个下午的时间。。。。不过就当熟悉k8s的命令了吧。。。只能这么安慰自己了最近在捣鼓k8s部署.netcore的后端(我是在windows上部署dockerdesktop来做测试的),在拉取我阿里云镜像仓库的私有镜像,搞来搞去搞了好久都没用dockpull registry.cn-hangzhou.aliyu......
  • 红客入门教程,零基础入门到精通,收藏这篇就够了
    渗透测试是门技术,也是一门艺术。参考书籍《欺骗的艺术》《入侵的艺术》《社会工程学攻击1》《社会工程学攻击2》这门技术(艺术)一开始也不是每个人都会的,正所谓没有人一出生就会走路,从不懂到入门到深谙,一步步慢慢来,每个人都是这样;但是在这个过程中,思路无疑是最重要的,没有做......
  • 网络安全工程师就业前景如何?好就业吗?零基础入门到精通,收藏这篇就够了
    随着互联网的飞速发展,网络安全问题日益严重,网络安全工程师作为守护信息安全的中坚力量,其重要性愈加凸显。那么,网络安全工程师的就业前景如何?是否容易就业?本文将详细探讨网络安全工程师的就业前景、市场需求以及职业发展的多方面因素,为有意从事这一职业的你提供全面的参考。......
  • 黑客入门先学什么,零基础入门黑客(非常详细)收藏这一篇就够了!
    前言零基础要怎么学黑客技术?作为八年网安人,分享我一套最强的学习攻略,就算你是新手小白,也可以知道从哪里开始入门!一、入门基础作为没有学过计算机的新手小白,首先要做的就是把基础打牢,不然你越往后学就会越觉得困难,首先应该掌握的是这些技术点:1.网络安全导论:网络安全法......
  • 【stable diffusion部署】手把手教你从0基础入门Stable Diffusion
    前言在开始学之前,我想提前说一下,我所理解的AI绘画的本质,就是手替,人提出方案,AI帮你完成具体的作画过程。写这篇文章的初衷,网上的StableDiffusion教程太多了,但是我真正去学的时候发现,没有找到一个对小白友好的,被各种复杂的参数、模型的专业词汇劝退。所以在我学了之后,想出......
  • .NET 各版本贡献者列表
    在微信群里看到有同学对.NET9的贡献者数量有质疑,.NET这样的一个全场景的应用开发平台,他的生态是很庞大的,自然一起参与开源贡献的开发者也是很大的,但是很多人都不知道一直有这么一个地址是统计了.NET各个版本的开发者数量的,这篇文章就是给大家统计显示一下各个版本的.NET贡献者人......
  • 推荐一个.NetCore开源的CMS项目,功能强大、扩展性强、支持插件的系统!
    推荐一个基于.NetCore开发的开源CMS项目,该项目功能完善、涉及知识点比较多,不管是作为二次开发、还是学习都是不错的选择。01项目简介Cofoundry是基于.Net开发的、代码优先开发、具备可扩展且灵活的架构、简单易用的内容管理系统。02项目框架1、基于.Net8开发。2、数据......
  • 华为路由器/交换机配置Console口AAA认证以及Telnet登录
    一、Console口登录 Console口是路由器/交换机的本地管理接口,通常用于设备初始配置和管理。本文将介绍console登录的两种配置方式1、密码模式配置成这种模式后Console登录只需要输入密码。配置方法一[Huawei]user-interfaceconsole0 [Huawei-ui-console0]authentica......