windows平台下编译curl支持https

libcurl安装-Windows平台 由于c++项目需要通过https请求与后台通信,于是找到了curl这个c++开源库。需要支持Windows平台和Linux系统,于是,先尝试在Windows上安装。 阅读详情

摘自:http://blog.youkuaiyun.com/zp373860147/article/details/7517758


参看http://curl.haxx.se/download.html,curl有多个版本,会有是否包含ssl之分。如果需要使之支持https,就需要使用带ssl的版本。

在Windows的平台下会有多个选择,想省事的话就直接下载win32-msvc带ssl版的,加压后里面会有一些curl依赖的dll,比如libeay32.dll ssleay32.dll openldap.dll等,这就是需要的ssl,直接用这里面的curllib.dll就可以支持https了。


当然,基于其他一些原因(比如不放心别人编好的版),也可以自己用源码编。

编译步骤如下:

1.下载http://curl.haxx.se/download/curl-7.25.0.zip,并解压到某处,我解压到F:\selfcurl\,则路径就是F:\selfcurl\curl-7.25.0

2.因为需要openssl和zlib,则分别在http://www.openssl.org/source/下载openssl(我下的是openssl-0.9.8r),解压到f:\,则路径是F:\openssl-0.9.8r;到http://zlib.net/zlib126.zip下载zlib,解压到某处,我的是F:\newzlib,则路径就是F:\newzlib\zlib-1.2.6。

3.开始编之前,需要准备几个工具,打开vs的命令提示行,分别cl回车,输入nmake -v 回车,如果有任意一个说不是内部或外部命令之类的,就需要配一些环境,否则可跳过这部分继续看4。

   3.1添加环境变量:在环境变量的系统变量中添加INCLUDE项,值是D:\Program Files\Microsoft Visual Studio 8\VC\include;D:\Program Files\Microsoft SDKs\Windows\v7.1\Include。再添加LIB项,值是D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft SDKs\Windows\v7.1\Lib。再在path项中添加D:\Program Files\Microsoft Visual Studio 8\Common7\Tools;D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;D:\Program Files\Microsoft Visual Studio 8\VC\bin;

  3.2到D:\Program Files\Microsoft Visual Studio 8\Common7\Tools执行一下vsvars32.bat

  3.3再次尝试cl回车和nmake -v回车,如果还不行,就注销一下系统,然后就可以了

4.编译zlib

可以首先查看一下F:\newzlib\zlib-1.2.6\win32目录下makefile.msc文件,有一项SHAREDLIB = zlib1.dll,这个名字很蛋疼,说明编出来的dll叫zlib1.dll,为毛要加个1啊!看着不爽的可以把它改成zlib.dll,保存退出。然后打开vs命令行工具,进入zlib的目录,我这里就是F:\newzlib\zlib-1.2.6,执行nmake -f  win32/makefile.msc,执行完后目录下就有了zlib.lib和zlib.dll

5.编译openssl

这是最蛋疼的一块,网上有很多说明,按照他们的说明,我没有一次成功的。其中无数次尝试遇到的问题这里说一下:

     5.1安装配置ActivePerl,安装后在CMD中试一下perl -v命令,如果说不是内部外部命令这些,配置一下环境变量,比如安装到d:\perl,则把d:\perl\bin添加到环境变量中的系统变量中的path中,然后注销一下系统,应该就可以了

    5.2打开vs命令提示行,进到openssl解压后的目录,F:\openssl-0.9.8r。执行perl configure vc-win32,他执行一段后,如果没错误,再执行ms\do_ms,然后他执行一段,如果没错,再执行nmake -f ms\ntdll.mak,执行后开始编,不过我这编的时候会出错,网上说的一些解决方案也都对应不上。只能放弃


6.编curl,因为curl必须要使用zlib和openssl,但是缺少openssl的dll和lib,恰巧我原来的代码里有openssl的dll和lib,就决定替代一把试试,于是把libeay32.dll libeay32.lib ssleay32.dll ssleay32.lib放到F:\openssl-0.9.8r\out32dll中。在F:\selfcurl\curl-7.25.0\lib中建一个builddebug.bat,内容如下:

call "D:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"
set CFG=debug-dll-ssl-dll-zlib-dll
set OPENSSL_PATH=F:\openssl-0.9.8r
set ZLIB_PATH=F:\newzlib\zlib-1.2.6
nmake -f Makefile.vc8


上面分别设置OPENSSL的路径,ZLIB的路径,和编译器号,我的是vs2005

然后运行这个bat就可以编出libcurld.dll和libcurld_imp.lib

同理改成set CFG=release-dll-ssl-dll-zlib-dll就可以编出release版


openssl的几个dll和lib在下面可以下载到

http://download.youkuaiyun.com/detail/zp373860147/4261965、



另外几点,如果一些版本编不过,可以尝试一下较早的版本。


libcurl-Windows静态库编译实战:从源码到成功调用的完整指南 本文详细介绍了在Windows平台下编译libcurl静态库的完整流程,从源码获取、环境配置到项目集成与性能优化。重点讲解了静态库编译的关键步骤、常见错误解决方案以及实际项目中的最佳实践,帮助开发者高效完成libcurl静态库的编译与调用。 阅读详情

相关推荐

Visual Studio 2019实战:从源码编译到项目集成Libcurl全解析

本文详细解析了在Visual Studio 2019中从源码编译Libcurl到项目集成的全过程,包括环境准备、编译配置、项目设置及常见问题解决。通过实战教程,帮助开发者高效完成Libcurl的配置与集成,提升开发效率。

weixin_33717117的博客 378

Windows下CURL编译 支持HTTPS

cURL是一个Linux下利用URL语法工作的文件传输工具,

Sakuya__的博客 8150

Windows下libcurl与OpenSSL静态编译及VS集成全攻略

在C/C++网络编程领域,HTTP/HTTPS请求能力与TLS证书校验是客户端开发的核心需求。libcurl作为跨平台协议层库,配合OpenSSL提供的加密层,能够在Windows上构建一套不依赖系统网络框架、支持静态链接的底层网络套件。针对32位与64位双架构的编译需求,开发者需要掌握Perl、NASM等工具链的配置,以及OpenSSL与libcurl的架构和静态/动态模式严格匹配的关键原则。通过合理的目录规划、nmake命令参数调优,以及Visual Studio中的包含目录、库目录和CURL_STAT

weixin_42545503的博客 263

windows/linux下编译支持https的curl

windows下使用vs2010编译支持https的curl

dragoo1的专栏 1262

CURL编译库在Windows VS2008环境下的应用指南

CURL是一个开源的、客户端URL传输库,支持多种协议,包括HTTP、HTTPS、FTP等。它允许开发者通过编程方式在各种操作系统中执行网络数据传输任务。CURL广泛应用于数据下载、文件上传、API调用等场景。CURL是一个强大的库,它支持多种协议的网络通信,包括HTTP、HTTPS、FTP等。其核心API为开发者提供了一组函数,用于控制和管理网络请求。使用CURL的基本流程通常涉及初始化一个CURL句柄,配置其各种选项,执行请求,并在完成后清理资源。以下是CURL使用的基础流程。

weixin_35761094的博客 1002

0/1背包问题:从暴力递归到动态规划详解

题目: 有一组数量为 n 个物品,每个物品都有重量w 和价值v 给定一个背包bag,背包装的物品不能超过背包最大载重容量返回背包bag 能装下的最大价值1. 物品的重量和价值:2. 背包的容量:暴力解法的核心是递归,通过逐一决策每个物品是否放入背包,最终找到最优解。状态定义:递归逻辑:递归终止条件: 动态规划解法 递归的暴力解法有重复子问题,导致了大量的重复计算。为了解决这个问题,我们可以使用动态规划来优化。状态定义:状态转移:边界条件: 测试方法 示例解析 假设:我们希望找到在容量为

Mr.Ayao's blog 2065

Win10编译64位curl(支持https)

编译完成后,拷贝zconf.h, zlib.h, zutil.h到D:\deps\zlib-1.2.12\include目录下,zconf.h在builds目录下,拷贝builds目录下Release下所有文件至D:\deps\zlib-1.2.12\lib目录下。如下所示,cmake编译完成后,再点击open projecte用vs2019打开项目进行编译。编译好的curl在如下目录,包括执行文件和开发用的库文件。3、下载openssl, zlib, curl。2、安装ActivePerl。

XiaoKing2008的专栏 773

CGNS快速入门到实战(二):VS配置调用CGNS静态链接库

CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库;(三)CGNS文件及案例展示。本篇文章重点讲述VS配置调用CGNS静态链接库。

ahang_99的博客 2616

windows平台下编译curl支持https(good)

转自:http://downloads.activestate.com 由于网上下载的 libcurl 不支持 gzip,只好自己动手编译,期间走了很多弯路,下面是最终成功的记录。 我所使用的环境 Visual Studio 2010 、 Windows 7 64 bit 1 下载文件 1.1 libcurl 下载页面 http://curl.haxx.se/do

threadroc的专栏 1378

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 182

C++cgal库配置+VS2017

Cgal几何图形库在VS2017上的下载、安装与配置。想要一口气下载完所有安装配件的,可以去文章末尾的链接。httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。

dsn3S的博客 1488

Windows下CURL编译:轻松实现HTTPS支持

Windows下CURL编译:轻松实现HTTPS支持 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今互联网环境中,安全通信已成为开发者和企业的基本需求。CURL,作为一个强大的命令行工具,支持多种互联网协议,如FTP、HTTP、HTTPS等,广泛应用于网络通信领域。然而,在Windows环境下编译支持HTTPS的CURL库并非易事,涉及到多个依赖库的编译和配置。...

gitblog_06518的博客 771

OpenClaw终于有了图形界面,一键安装使用你的24小时AI 研究助手!

ClawX是连接强大 AI 智能体与普通用户之间的桥梁。基于OpenClaw构建,它将命令行式的 AI 编排转变为易用、美观的桌面体验——无需使用终端。无论是自动化工作流、连接通讯软件,还是调度智能定时任务,ClawX 都能提供高效易用的图形界面,帮助你充分发挥 AI 智能体的能力。ClawX 预置了最佳实践的模型供应商配置,原生支持 Windows 平台以及多语言设置。当然,你也可以通过设置 → 高级 → 开发者模式来进行精细的高级配置。

Maynor的博客 3389

linux ndk 编译,curl ndk 编译

最近做项目用到curl库由于是使用curl库的老版本(v 1.52),不支持https,同时还不支持其他的一些参数设置,所以考虑升级到最新版本先说一下环境Windows 系统下安装了ndk以前已经在jni目录存在老的版本代码网上找了很多教程都使用linux编译,然后在linux里面还要安装ndk,有点复杂所以还是要从源码下手仔细看了一下源码里面的目录,其实需要的一个是头文件,一个是库的源码(如下...

weixin_36193418的博客 331

读懂ARM汇编程序,你只差这篇!保姆级教程(附完整示例剖析)!

ARM汇编中的符号、标号、伪操作有哪些?C语言和汇编语言如何混合编程?GNU ARM汇编和ARM汇编的区别有哪些?

车载系统攻城狮 1万+

YOLOv12改进策略【独家融合改进】| MobileNetV4+BiFPN,轻松实现降参涨点,适用专栏内所有的骨干替换

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 978

Windows系统curl终极指南:从零开始掌握命令行网络工具

你是否曾经需要在Windows上快速下载文件、测试API接口或检查网站状态?curl就是你的最佳选择!这个强大的命令行工具让网络操作变得简单高效。无论你是开发人员、系统管理员还是普通用户,掌握curl都能极大提升你的工作效率。本文将带你从零开始,一步步学习如何在Windows上安装、配置和使用curl,并分享一些实用技巧和高级功能。 ## 🚀 快速入门:3分钟搞定curl安装 ### 检查系

gitblog_00346的博客 411

嵌入式STM32F407CET6移植OpenHarmony系统方法

文件末尾添加:export PATH=~/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH。编译完成文件输出在LiteOs源码目录下out/STM32F407_ATK_Explorer文件夹中。②点击connect to the target,下方会自动显示识别出来的芯片型号以及flash大小。⑤点击program verify并点击start,等待烧写并校验完成,你就能看到程序正在运行了。,在选择刚才我们说的Huawei_LiteOS.hex文件。

嵌入式技术开发 546

【免费下载】 libcurl 编译好的库文件下载

libcurl 编译好的库文件下载 【下载地址】libcurl编译好的库文件下载 libcurl 编译好的库文件下载本仓库提供了一个编译好的 libcurl 库文件资源,包含以下内容:- `libcurl.lib`:libcurl 的静态库文件 ...

gitblog_09733的博客 1045

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WIN11下编译CURL

总的来说,libcurl 是一个功能强大、易于使用且稳定性高的网络传输库,适用于各种类型的应用程序,从简单的命令行工具到复杂的网络服务。我们验证一下编译好的libcurl是不是支持HTTPS,可以使用编译好的libcurl生成的可执行测试程序curl.exe测试。仍然需要打开vs2017的命令行工具,因为OPENSSL编译的是64位的,所以CURL也编译64位的,还是以管理员身份启动。编译好后会在解压的CURL目录下的生成一个builds目录,编译好的libcurl库就在里面。本人下载了7.88.0版本。

oqqWang1234567的专栏 1423

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

cmake:Windows编译支持HTTPS的curl库及find_package查找CURL时需要注意的问题

curl是一个成熟的HTTP client库,现在windows平台下可以使用cmake在命令行完成编译。 build curl 以下脚本实现Windows CMD下使用cmake及VS2015编译curl cd curl mkdir build cd build # 生成Visual Studio 2015工程文件 cmake .. -G "Visual Studio 14 2015 Win64" ^ -DCMAKE_INSTALL_PREFIX=J:\curl-vc140-x64 ^ -DBUILD

10km的专栏 6458

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: windows平台下编译curl支持https(good)
下一篇: curl编译静态库收集
「已注销」
博客等级 码龄14年 116粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值