C语言LIBCURL库使用注意事项

摘要:
原因是以下参数设置为//CURLOPT_当HEADER设置为1时,回调数据将返回响应行和标题行curl_easy_setopt;3.表单数据包拆分的问题是存在延续包。尽管跟踪流显示相同,但服务器端解析失败。最后一个发现是,我添加了一个自定义头字段,头字段值结束,libcurl不会转义它,导致请求行之间出现空行。http请求格式不完全符合协议标准,导致4.curl_easy_getinfo;崩溃问题实际上是由于httpCode的类型错误,应该声明为long。如果声明为int,则调用时可能会发生段错误。一种可行的方法是下载源代码。

这里一个java程序员进行C++开发使用libcurl踩过的坑:

1.  发送指定请求类型body,比较通用方法如下,可以直接填写数据并手动指定content type,如果是form表单等形式,则需要参考curl_formadd方法

    struct curl_slist *list = NULL;
    list = curl_slist_append(list, "Content-Type: application/octet-stream");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);

    /* size of the POST data */
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, bufferLen);
    /* pass in a pointer to the data - libcurl will not copy 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buffer);

2. 响应结果包含了响应行和头域信息

curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);

如上所示,得到的response包含响应行和头域信息,而且网上也没有相关问题描述。原因为设置了如下参数。

        //CURLOPT_HEADER设置为1时,回调数据会返回响应行和header行
        curl_easy_setopt(curl, CURLOPT_HEADER, 1);

3.form-data包拆分问题,多了一个Continuation的包,虽然跟踪流显示是一样的,但是服务端解析失败

C语言LIBCURL库使用注意事项第1张

这个最终发现坑在我添加了一个自定义头域,头域的值以 结尾,libcurl不会对其进行转义,导致请求行之间多了一个空行,http请求格式不完全符合协议标准导致

4. curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode); 崩溃问题

实际上是因为 httpCode 类型错误,应该申明为long,如果申明为int,则调用时可能出现段错误。

参考 https://www.bo56.com/libcurl%E4%B8%AD%E4%BD%BF%E7%94%A8curl_easy_getinfo-%E4%BA%A7%E7%94%9F%E6%AE%B5%E9%94%99%E8%AF%AF%E5%88%86%E6%9E%90/

5.不支持https问题

访问https报错“Protocol https not supported or disabled in libcurl”,可通过curl -V 查看是否有HTTPS。如果没有则不支持,需要更新。

C语言LIBCURL库使用注意事项第2张

可行办法之一是下载源码。编译安装时 执行

./configure -with-ssl

带上-with-ssl 进行编译

免责声明:文章转载自《C语言LIBCURL库使用注意事项》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Nginx线上部署多个Vue项目(路径区分)iptables的配置文件/etc/sysconfig/iptables不存在下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

elasticsearc进行全文索引高亮显示

首先使用composer安装扩展 composer require elasticsearch/elasticsearch composer require nunomaduro/collision 开启你的 elasticsearch  与 kibana HTML代码  使用vue进行数据渲染 <!doctype html> <htm...

C语言中查看类型的大小(占几个byte)

/*sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。 C99和C11提供%zd转换说明匹配sizeof的返回类型[2]。 一些不支持C99和C11的编译器可用%u或%lu代替%zd *//* typesize.c -- 打印类型大小(单位是字节) */ #include <stdio.h> int main(void) {...

微信小程序wx.request请求服务器json数据并渲染到页面

【原文出自】: https://blog.csdn.net/weixin_39927850/article/details/79766259 微信小程序的数据总不能写死吧,肯定是要结合数据库来做数据更新,而小程序数据主要是json数据格式,所以我们可以利用php操作数据库,把数据以json格式数据输出即可。现在给大家讲一下,微信小程序的wx.request...

Dirsearch 快速开始

Dirsearch 一个 web 路径扫描工具 本文版本:v0.4.1(2020.12.8) 安装 下载源代码: git clone https://github.com/maurosoria/dirsearch.git 安装需求的 python 库: cd dirsearch pip3 install -r requirements.txt 或者使用...

Kubernetes---修改证书可用年限

⒈查询证书可用时间 openssl x509 -in apiserver.crt -text -noout   *在Vallidity节点下   Kubernetes有两种机制去创建证书,有一部分是1年的,有1部分是10年的 ⒉部署Go语言环境   Go中文社区:https://studygolang.com/dl   https://studygolan...

TensorflowSharp安装和使用入门

Tensorflow是一个人工智能框架。TensorflowSharp是对Tensorflow C语言版接口的封装,便于C#开发人员在项目中使用Tensorflow。 一、使用方法 TensorflowSharp的使用很简单,首先使用NuGet安装TensorflowSharp包,然后新建C#控制台程序,输入下面代码,运行即可。 1 //创建图 2 va...