libcurl.net入门使用

server/2024/11/18 15:34:15/

curl>libcurlnet_0">curl>libcurl.net入门使用

curl>libcurlnet_2">关于curl>libcurl.net

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

安装

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

使用流程

  1. curl>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. 释放清理curl>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);// 设置不校验SSLeasy.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;
}

http://www.ppmy.cn/server/142942.html

相关文章

Ubuntu安装配置MySQL(远程登录)

Ubuntu安装配置MySQL 好多命令每次都忘&#xff0c;还要在网上查&#xff0c;在这里留一份&#xff0c;方便自己日后查看 步骤 1: 更新软件包列表 首先&#xff0c;打开终端并更新你的软件包列表&#xff0c;确保你拥有最新的软件包信息&#xff1a; sudo apt update步骤 2…

Essential Cell Biology--Fifth Edition--Chapter one (8)

1.1.4.6 The Cytoskeleton [细胞骨架] Is Responsible for Directed Cell Movements 细胞质基液不仅仅是一种无结构的化学物质和细胞器的混合物[soup]。在电子显微镜下&#xff0c;我们可以看到真核细胞的细胞质基液是由长而细的丝交叉而成的。通常[Frequently]&#xff0c;可…

STM32 | 空气净化器

空气净化器 一、项目背景 空气净化器又称“空气清洁器”、空气清新机、净化器&#xff0c;是指能够吸附、分解或转化各种空气污染物&#xff08;一般包括PM2.5、粉尘、花粉、异味、甲醛之类的装修污染、细菌、过敏原等&#xff09;&#xff0c;有效提高空气清洁度的产品&…

python语言基础-5 进阶语法-5.2 装饰器-5.2.2 简单装饰器

声明&#xff1a;本内容非盈利性质&#xff0c;也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站&#xff0c;会尽量附上原文链接&#xff0c;并鼓励大家看原文。侵删。 5.2.2 简单装饰器 装饰器的形式就是一个闭包&#xff0c;下面是一个简单的定义并使用…

微信小程序进行md5加密 ,base64 转码

封装一个Md5加密的工具 &#xff1a; utils /md5.js function md5(string) { function md5_RotateLeft(lValue, iShiftBits) { return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); } function md5_AddUnsigned(lX, lY) { var lX4, lY4, l…

讨论大语言模型在学术文献应用中的未来与所带来的可能性和担忧

概述 近年来&#xff0c;大规模语言模型因其能够根据人类指令自动生成大量高质量文本而备受关注。特别是 2022 年底发布的 ChatGPT 3.5&#xff0c;因其聊天界面的易用性而迅速走红。目前&#xff0c;学术交流领域正在积极讨论如何使用它。而最初的期望也逐渐让人们对其能力和…

Linux下的vim和gdb

vim&#xff1a; vim是编译功能强大&#xff0c;多模式的编译器。实际中vim有很多种模式&#xff0c;但是常用的就三种模式&#xff1a; 1、正常/普通/命令模式(Normal mode)控制屏幕光标的移动&#xff0c;字符、字或行的删除&#xff0c;移动复制某区段及进入Insert mode下…

解决跨域问题

什么是跨域&#xff1f; 跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器对javascript施加的安全限制。跨域只出现在前端&#xff0c;后端不会出现。 怎么解决跨域&#xff1f; 1、使用nginx转发 同源策略只限制于浏览器端的服务…