#C++#通过libcurl获取当前次HTTP请求的一些相关信息

【C++】使用 curl 库配置 HTTP 的 Post/Get 请求响应数据(封装一个简单类) 2023.7.18 Update: 【LibCurl】C++使用libcurl实现HTTP POST和GET 要想使用 LibCURL 库,首先需配置 CURL 库 参考链接:【C++开源库】Windows 下编译 libcurl 库 // 测试代码 #include <iostream> using namespace std;; int main() { curl_... 阅读详情

libcurl库是一个非常完整和好用的HTTP请求库,通过它,我们可以方便的书写HTTP请求程序,而且不需要关心HTTP协议内部的细节处理。

最近在做一个HTTP监测的程序,就是通过libcurl来实现的。通过查看官方文档发现,libcurl库几乎提供了所有我们需要的信息返回,如:域名解析时间,连接服务器时间,下载速度,上传速度,总响应时间,重定向次数,最后的有效URL等一系列和HTTP请求相关的信息,获取也非常方便,只要通过curl_easy_getinfo()函数加相关的参数就可以得到,详见:http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html


注:有的数据获取需要通过curl_easy_setopt ()配置了相关选项才可以得到。比如重定向就要配置了CURLOPT_FOLLOWLOCATION选项为1 

NAME

curl_easy_getinfo - extract information from a curl handle

SYNOPSIS

#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );

DESCRIPTION

Request internal information from the curl session with this function. The third argument MUST be a pointer to a long, a pointer to a char *, a pointer to a struct curl_slist * or a pointer to a double (as this documentation describes further down). The data pointed-to will be filled in accordingly and can be relied upon only if the function returns CURLE_OK. Use this function AFTER a performed transfer if you want to get transfer- oriented data.

You should not free the memory returned by this function unless it is explicitly mentioned below.

AVAILABLE INFORMATION

The following information can be extracted:

CURLINFO_EFFECTIVE_URL

Pass a pointer to a char pointer to receive the last used effective URL.

CURLINFO_RESPONSE_CODE

Pass a pointer to a long to receive the last received HTTP or FTP code. This option was known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. This will be zero if no server response code has been received. Note that a proxy's CONNECT response should be read with CURLINFO_HTTP_CONNECTCODE and not this.

CURLINFO_HTTP_CONNECTCODE

Pass a pointer to a long to receive the last received proxy response code to a CONNECT request.

CURLINFO_FILETIME

Pass a pointer to a long to receive the remote time of the retrieved document (in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get -1, it can be because of many reasons (unknown, the server hides it or the server doesn't support the command that tells document time etc) and the time of the document is unknown. Note that you must tell the server to collect this information before the transfer is made, by using the CURLOPT_FILETIME option to curl_easy_setopt(3) or you will unconditionally get a -1 back. (Added in 7.5)

CURLINFO_TOTAL_TIME

Pass a pointer to a double to receive the total time in seconds for the previous transfer, including name resolving, TCP connect etc.

CURLINFO_NAMELOOKUP_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the name resolving was completed.

CURLINFO_CONNECT_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the connect to the remote host (or proxy) was completed.

CURLINFO_APPCONNECT_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the SSL/SSH connect/handshake to the remote host was completed. This time is most often very near to the PRETRANSFER time, except for cases such as HTTP pippelining where the pretransfer time can be delayed due to waits in line for the pipeline and more. (Added in 7.19.0)

CURLINFO_PRETRANSFER_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved. It does not involve the sending of the protocol- specific request that triggers a transfer.

CURLINFO_STARTTRANSFER_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the first byte is received by libcurl. This includes CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate the result.

CURLINFO_REDIRECT_TIME

Pass a pointer to a double to receive the total time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. CURLINFO_REDIRECT_TIME contains the complete execution time for multiple redirections. (Added in 7.9.7)

CURLINFO_REDIRECT_COUNT

Pass a pointer to a long to receive the total number of redirections that were actually followed. (Added in 7.9.7)

CURLINFO_REDIRECT_URL

Pass a pointer to a char pointer to receive the URL a redirect would take you to if you would enable CURLOPT_FOLLOWLOCATION. This can come very handy if you think using the built-in libcurl redirect logic isn't good enough for you but you would still prefer to avoid implementing all the magic of figuring out the new URL. (Added in 7.18.2)

CURLINFO_SIZE_UPLOAD

Pass a pointer to a double to receive the total amount of bytes that were uploaded.

CURLINFO_SIZE_DOWNLOAD

Pass a pointer to a double to receive the total amount of bytes that were downloaded. The amount is only for the latest transfer and will be reset again for each new transfer.

CURLINFO_SPEED_DOWNLOAD

Pass a pointer to a double to receive the average download speed that curl measured for the complete download. Measured in bytes/second.

CURLINFO_SPEED_UPLOAD

Pass a pointer to a double to receive the average upload speed that curl measured for the complete upload. Measured in bytes/second.

CURLINFO_HEADER_SIZE

Pass a pointer to a long to receive the total size of all the headers received. Measured in number of bytes.

CURLINFO_REQUEST_SIZE

Pass a pointer to a long to receive the total size of the issued requests. This is so far only for HTTP requests. Note that this may be more than one request if FOLLOWLOCATION is true.

CURLINFO_SSL_VERIFYRESULT

Pass a pointer to a long to receive the result of the certification verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to curl_easy_setopt(3)).

CURLINFO_SSL_ENGINES

Pass the address of a 'struct curl_slist *' to receive a linked-list of OpenSSL crypto-engines supported. Note that engines are normally implemented in separate dynamic libraries. Hence not all the returned engines may be available at run-time. NOTE: you must call curl_slist_free_all(3) on the list pointer once you're done with it, as libcurl will not free the data for you. (Added in 7.12.3)

CURLINFO_CONTENT_LENGTH_DOWNLOAD

Pass a pointer to a double to receive the content-length of the download. This is the value read from the Content-Length: field. Since 7.19.4, this returns -1 if the size isn't known.

CURLINFO_CONTENT_LENGTH_UPLOAD

Pass a pointer to a double to receive the specified size of the upload. Since 7.19.4, this returns -1 if the size isn't known.

CURLINFO_CONTENT_TYPE

Pass a pointer to a char pointer to receive the content-type of the downloaded object. This is the value read from the Content-Type: field. If you get NULL, it means that the server didn't send a valid Content-Type header or that the protocol used doesn't support this.

CURLINFO_PRIVATE

Pass a pointer to a char pointer to receive the pointer to the private data associated with the curl handle (set with the CURLOPT_PRIVATE option to curl_easy_setopt(3)). Please note that for internal reasons, the value is returned as a char pointer, although effectively being a 'void *'. (Added in 7.10.3)

CURLINFO_HTTPAUTH_AVAIL

Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available. The meaning of the bits is explained in the CURLOPT_HTTPAUTH option forcurl_easy_setopt(3). (Added in 7.10.8)

CURLINFO_PROXYAUTH_AVAIL

Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available for your proxy authentication. (Added in 7.10.8)

CURLINFO_OS_ERRNO

Pass a pointer to a long to receive the errno variable from a connect failure. Note that the value is only set on failure, it is not reset upon a successfull operation. (Added in 7.12.2)

CURLINFO_NUM_CONNECTS

Pass a pointer to a long to receive how many new connections libcurl had to create to achieve the previous transfer (only the successful connects are counted). Combined withCURLINFO_REDIRECT_COUNT you are able to know how many times libcurl successfully reused existing connection(s) or not. See the Connection Options ofcurl_easy_setopt(3) to see how libcurl tries to make persistent connections to save time. (Added in 7.12.3)

CURLINFO_PRIMARY_IP

Pass a pointer to a char pointer to receive the pointer to a zero-terminated string holding the IP address of the most recent connection done with this curl handle. This string may be IPv6 if that's enabled. Note that you get a pointer to a memory area that will be re-used at next request so you need to copy the string if you want to keep the information. (Added in 7.19.0)

CURLINFO_PRIMARY_PORT

Pass a pointer to a long to receive the destination port of the most recent connection done with this curl handle. (Added in 7.21.0)

CURLINFO_LOCAL_IP

Pass a pointer to a char pointer to receive the pointer to a zero-terminated string holding the local (source) IP address of the most recent connection done with this curl handle. This string may be IPv6 if that's enabled. The same restrictions apply as to CURLINFO_PRIMARY_IP. (Added in 7.21.0)

CURLINFO_LOCAL_PORT

Pass a pointer to a long to receive the local (source) port of the most recent connection done with this curl handle. (Added in 7.21.0)

CURLINFO_COOKIELIST

Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all cookies cURL knows (expired ones, too). Don't forget to curl_slist_free_all(3) the list after it has been used. If there are no cookies (cookies for the handle have not been enabled or simply none have been received) 'struct curl_slist *' will be set to point to NULL. (Added in 7.14.1)

CURLINFO_LASTSOCKET

Pass a pointer to a long to receive the last socket used by this curl session. If the socket is no longer valid, -1 is returned. When you finish working with the socket, you must call curl_easy_cleanup() as usual and let libcurl close the socket and cleanup other resources associated with the handle. This is typically used in combination withCURLOPT_CONNECT_ONLY. (Added in 7.15.2)

NOTE: this API is not really working on win64, since the SOCKET type on win64 is 64 bit large while its 'long' is only 32 bits.

CURLINFO_FTP_ENTRY_PATH

Pass a pointer to a char pointer to receive a pointer to a string holding the path of the entry path. That is the initial path libcurl ended up in when logging on to the remote FTP server. This stores a NULL as pointer if something is wrong. (Added in 7.15.4)

Also works for SFTP since 7.21.4

CURLINFO_CERTINFO

Pass a pointer to a 'struct curl_certinfo *' and you'll get it set to point to struct that holds a number of linked lists with info about the certificate chain, assuming you had CURLOPT_CERTINFO enabled when the previous request was done. The struct reports how many certs it found and then you can extract info for each of those certs by following the linked lists. The info chain is provided in a series of data in the format "name:content" where the content is for the specific named data. See also the certinfo.c example. NOTE: this option is only available in libcurl built with OpenSSL support. (Added in 7.19.1)

CURLINFO_CONDITION_UNMET

Pass a pointer to a long to receive the number 1 if the condition provided in the previous request didn't match (see CURLOPT_TIMECONDITION). Alas, if this returns a 1 you know that the reason you didn't get data in return is because it didn't fulfill the condition. The long ths argument points to will get a zero stored if the condition instead was met. (Added in 7.19.4)

CURLINFO_RTSP_SESSION_ID

Pass a pointer to a char pointer to receive a pointer to a string holding the most recent RTSP Session ID.

Applications wishing to resume an RTSP session on another connection should retreive this info before closing the active connection.

CURLINFO_RTSP_CLIENT_CSEQ

Pass a pointer to a long to receive the next CSeq that will be used by the application.

CURLINFO_RTSP_SERVER_CSEQ

Pass a pointer to a long to receive the next server CSeq that will be expected by the application.

(NOTE: listening for server initiated requests is currently unimplemented).

Applications wishing to resume an RTSP session on another connection should retreive this info before closing the active connection.

CURLINFO_RTSP_CSEQ_RECV

Pass a pointer to a long to receive the most recently received CSeq from the server. If your application encounters a CURLE_RTSP_CSEQ_ERROR then you may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this value.

TIMES

An overview of the six time values available from curl_easy_getinfo()

curl_easy_perform()   |   |--NAMELOOKUP   |--|--CONNECT   |--|--|--APPCONNECT   |--|--|--|--PRETRANSFER   |--|--|--|--|--STARTTRANSFER   |--|--|--|--|--|--TOTAL   |--|--|--|--|--|--REDIRECT

NAMELOOKUP

CURLINFO_NAMELOOKUP_TIME. The time it took from the start until the name resolving was completed.

CONNECT

CURLINFO_CONNECT_TIME. The time it took from the start until the connect to the remote host (or proxy) was completed.

APPCONNECT

CURLINFO_APPCONNECT_TIME. The time it took from the start until the SSL connect/handshake with the remote host was completed. (Added in in 7.19.0)

PRETRANSFER

CURLINFO_PRETRANSFER_TIME. The time it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.

STARTTRANSFER

CURLINFO_STARTTRANSFER_TIME. The time it took from the start until the first byte is received by libcurl.

TOTAL

CURLINFO_TOTAL_TIME. Total time of the previous request.

REDIRECT

CURLINFO_REDIRECT_TIME. The time it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. So, this is zero if no redirection took place.

RETURN VALUE

If the operation was successful, CURLE_OK is returned. Otherwise an appropriate error code will be returned.


libcurl API 常用函数 libcurl 详参libcurl 1 curl_easy_getinfo CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ); 使用此函数从curl会话请求内部信息。第三个参数必须是指向long的指针、指向char*的指针、指向struct curl_slist*的指针或指向double的指针(本文档将进一步介绍)。指向的数... 阅读详情

相关推荐

12、libcurl库发送数据和通过回调函数打印数据

(如何使用静态库执行:g++ -g http-post.cpp -o example -lcurl。注意,-lcurl是指链接libcurl.a,gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件。基本思想:最近公司在做语音识别的项目,需要HTTP请求支持,因此使用libcurl库,关于libcurl安装请参考手册;任务要求:使用http请求,j送初始son串,返回结果json串。关于使用HTTP请求post数据,直接贴上源代码,以供参考;编译文件,链接静态库。

sxj731533730 1406

curl获取状态码

$curl = curl_init(); $url='http://www.123.com'; curl_setopt($curl, CURLOPT_URL, $url); //设置URL curl_setopt($curl, CURLOPT_HEADER, 1); //获取Header curl_setopt($curl,CURLOPT_NOBODY,true); //Body就不要了吧,我们只...

sh2018的博客 1118

Python小波变换实战:用PyCWT分析气候数据(附完整代码)

本文详细介绍了如何使用Python中的PyCWT库进行小波变换分析,特别针对气候数据(如NINO3海温异常数据)的多尺度周期性特征提取。通过完整的代码示例,从数据预处理、小波参数配置到结果可视化,逐步指导读者掌握小波变换在气候研究中的实际应用。

weixin_29088655的博客 281

c++ libcurl CURLINFO_RESPONSE_CODE 总是返回0

c++ libcurl CURLINFO_RESPONSE_CODE 总是返回0

goodxianping的专栏 6505

Origin2018(汉化版)在使用科学计数法的时候如何将坐标刻度的0.0改成0

文章目录1 问题2 解决方法 1 问题 先看下面这张图,当我使用科学计数法时,纵坐标出现了0.0的字样,这样看起来很不美观。有些期刊还会有要求,不能出现0.0的格式。 图1 那么该怎么将它改成0呢?首先让我们尝试着用Origin自带的属性,看看能不能设置。 2 解决方法 解决方法一: step1: 双击坐标轴,打开坐标轴属性设置。 step2: 在刻度线标签选项中设置左轴的显示 图2 会发现,按照图2的方式改好之后,其它的小数位也全没了,如果但是有些数字就被覆盖了,这显然不是我

qq_40077565的博客 2万+

伺服驱动器485通信

485通信使用方法,485通信在上位机和伺服驱动器之间的应用,根据需要驱动电机旋转。

haipi511715316的博客 1万+

curl学习篇3:curl API简介

内容来源: 官方API手册 (转)libcurl库使用方法,好长,好详细。 libcurl库具体使用方法 curl_easy_setopt的基本选项解析 curl中curl_easy_setopt的CURLoption参数详解 libcurl 函数之 curl_easy_setopt 详细 函数介绍: curl_global_init()   函数原型:CURLcode curl_global_init(long flags)   函数功能:全局初始化curl,给定要初始化的不同特性的位集。   函数位置:

weixin_42645653的博客 2559

CATIA二次开发CAA:(一)开发环境搭建

CATIA+CAA+RADE+VS2012

ysm1987的博客 1万+

libcurl 使用方法简介

最近项目中需要使用http实现文件的上传功能,使用到了libcurl,转载了一篇博客记录下,便于后续的查看。 简介 libcurl是一个跨平台的开源网络协议库,支持http, https, rtsp等多种协议 。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。 所以,使用libcur...

Captain--Jack 3202

RK3588 Linux启动优化至亚秒级全链路剖析

本文深入探讨RK3588平台Linux系统启动加速技术,涵盖从BL1/ATF安全固件、U-Boot剪裁到内核精简化等全链路优化方案,实现从上电到用户脚本800ms内完成的实战经验。​​文末提供完整解决方案获取方式​​。由于在 ARMv6 之后引入了 TrustZone 模块, 目前市面上 ARMv7 和 ARMv8 之后的系统都会包含了该模块, 这个模块由 BL1 启动, 且在 ATF(ARM Trust Firmware) 固件中, 既安全世界中引导到 BL33 (UBOOT)的系统。

韩若明溪 1777

Unity详细介绍说明限制Unity帧率的方式

在Unity开发中,帧率(FPS,Frames per Second)是一个非常重要的表现标准,它直接影响了游戏运行的流畅度。在某些应用场景里,我们可能需要手动限制帧率。限制帧率可以减少电脑的CPU和GPU负载,使运行更加稳定,同时对于移动设备来说还能有效降低电量消耗。下面就详细介绍几种限制Unity中帧率的方式。

zjw1349547081的专栏 5437

libcurl使用心得

libcurl使用心得 Libcurl为一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用。 http://curl.haxx.se/libcurl/ 从http://curl.haxx.se/libcurl

lionzl的专栏 774

双馈风机并网系统宽频振荡机理与抑制方法研究

双馈风机并网系统宽频振荡分析与抑制 摘要:本文研究了双馈风机(DFIG)接入弱电网引发的宽频振荡问题。通过建立DFIG并网系统阻抗模型,分析了锁相环带宽、电流环带宽等参数对阻抗特性的影响。研究揭示了DFIG与电网阻抗交互导致交截频率处相位差超过180°的振荡机理。提出基于锁相环优化的阻抗重塑抑制策略,采用电压补偿和陷波器改善系统稳定性。仿真结果表明,该方法能有效降低相位差约10°-168°,显著抑制宽频振荡。代码实现了阻抗建模、稳定性分析和抑制策略验证,为工程应用提供了理论依据。

huanghm88的专栏 319

C++ 用libcurl库进行http通讯网络编程

转自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一、LibCurl基本编程框架 二、一些基本的函数 三、curl_easy_setopt函数部分选项介绍 四、curl_easy_perform 函数说明(error 状态码) 五、libcurl使用的HTTP消息头 六、获

理性的幻想 7313

基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法

基于Verilog的8位CPU设计及UART扩展实现方案,包含完整的架构设计、核心代码实现和仿真验证方法

a_zxswer的博客 190

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

使用libcurl获取重定向后的url

重定向分为301永久重定向和302临时重定向,用于更换url的情况。 string GetRedirectUrl(const string&amp; url) { CURL* curl = curl_easy_init(); if (curl) { char* res = NULL; curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); ...

qq_42673507的博客 4517

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

使用curl库获取重定向之后的url

示例代码如下: #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; #pragma comment(lib, "libcurl_imp.lib") void download(string urlHttp) { CURL* curl = NULL; CURLcode res = CURL...

无与伦比BLOG 3708

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【小沐学C++】libcurl实现HTTP/HTTPS请求

libcurl 是一个免费且易于使用的客户端 URL 传输 库,支持DICT,FILE,FTP,FTPS,GOPHER,GOPHERS,HTTP,HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POPP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB、SMBS、SMTP、SMTPS、TELNET 和 TFTP。

爱看书的小沐 7953

curl上传和下载C语言实现

上传 /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | *

lu_linux的博客 1675

libcurl 调用curl_easy_getinfo( ) 返回错误码对照

//执行设置好的操作 res = curl_easy_perform(easy_handle); //获取HTTP错误码 long HTTP_flag = 0; curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE, &amp;HTTP_flag); curl_getinfo...

weixin_33802505的博客 4279

libcurl实现获取内容长度、请求文件(断点续传)

int curlApi_download(char *url, char *filePath) { CURL *curl = NULL; CURLcode code = 0; double conLen = 0; //必须为double类型 long downloadedSize = 0; int ret = 0; curl = curl_easy_init(); if(NULL == curl) { return -1; } FILE *fp = fopen(filePa.

dongyoubin的博客 1439

libcurl编程实例,回调函数的使用

[cpp] view plain copy实例1:将请求的网页内容写入文件  // 将下载的网页写入文件  size_t PageDownloader::WriteData(void * ptr, size_t size, size_t nmemb, void * stream)  {      fp = fopen(PAGEFILE, "w+");       if ( fp == NULL) ...

thanklife的专栏 3291

http参数 libcurl,HTTP状态code。与libcurl的?

How do I get the HTTP status code (eg 200 or 500) after calling curl_easy_perform?解决方案CURLINFO_RESPONSE_CODEPass a pointer to a long to receive the last received HTTP or FTP code. Thisoption was known...

weixin_33577842的博客 288

curl socket 访问_libcurl网络连接使用tcp/ip

CURL *curl;CURLcode res;const char *request = "GETas.xxxxE测试发送";curl_socket_t sockfd; /* socket */long sockextr;size_t iolen;curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL, "127....

weixin_35601445的博客 1173
上一篇: linux启动时候libc.so.6等库无权访问(Permission denied)问题解决
下一篇: 心情
jaylong35
博客等级 码龄20年 115粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值