libcurl.net入门使用

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

使用示例

C# 复制代码
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;
}
相关推荐
csdn_aspnet1 天前
如何用 C# 和 Gemma 3 在本地构建一个真正能完成工作的 AI 代理的
人工智能·ai·c#·gemma
我是唐青枫1 天前
C#.NET Span 深入解析:零拷贝内存切片与高性能实战
开发语言·c#·.net
咕白m6251 天前
C# 高效复制 Word 文档内容
后端·c#
Rolay1 天前
打印功能开发历程,解决百分之九十九的打印需求
c#·打印机·c#打印优化
小曹要微笑1 天前
c#的异常
microsoft·c#·异常·c#的异常
light blue bird1 天前
MES/ERP大数据报表条件索引查询组件
数据库·.net·winform·t-sql·大数据报表
河西石头1 天前
powerconfig告别繁琐配置读写---为C#提供了一个快捷的读写配置文件的API
开发语言·c#·高效读写配置文件·c#配置文件·xml读写
Scout-leaf1 天前
WPF新手村教程(五)— 附魔教学(绑定)
c#·wpf
宝桥南山1 天前
Microsoft Fabric - 试一下在Blazor应用中使用 GraphQL API去连接Lakehouse
microsoft·c#·asp.net·.netcore·fabric·db
gc_22992 天前
C#调用Microsoft.ML.OnnxRuntime和YOLO5模型时的输入数据格式分析
yolo·c#·数据预处理