t113-c-libcurl开发

发布时间 2023-08-16 00:05:52作者: 悠闲的小莫

大名鼎鼎的curl库,能做什么呢?

关于curl的使用:

https://blog.csdn.net/luolianxi/article/details/105465057

目前来说我只需要用到c库开发,

tina的curl

按理来说tina会自动帮你安装curl库并放到/usr/bin中

当然也要使能ssl才能访问http网址

使用curl库:

curl库的头文件路径tina已经编译出来放到了以下路径:

需要的时候复制到工程里面就行,需要注意的是这个头文件原理是引用命令行的形式去获取数据的,所以是需要安装curl才能运行

安装curl和ssl实现http访问

那如果万一tina没有安装curl怎么办?那么就需要手动进行安装了,安装过程再这篇文章有讲解,以防万一复制一份:

https://blog.csdn.net/lhh2333/article/details/132227655

-----------------------------------

移植环境
虚拟机:ubuntu16.04

交叉编译器:arm-linux-gnueabihf-gcc

openssl版本:1.1.1v

curl版本:7.63.0

openssl和curl的源码还有证书我已经长传至我的gitee,可以直接下载使用

openssl+curl: 嵌入式arm开发板使用curl+openssl实现https通信 (gitee.com)

源码编译
openssl编译
将openssl源码解压出来,然后进入源码目录,打开终端,输入裁剪命令

./config no-asm shared --prefix=/data1/code/openssl-arm --cross-compile-prefix=arm-linux-gnueabihf-
 
# --prefix:库和头文件生成路径
# --cross-compile-prefix:指定arm编译器
裁剪完后要注意,打开生成的Makefile文件,将这里的-m64去掉,不然编译会报错 

 

接着直接编译和安装

make -j4 & make install
curl编译
同样的,将源码解压出来,裁剪

./configure --prefix=/data1/code/curl-arm --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++  --with-ssl=/data1/code/openssl-arm
 
# --prefix:库和头文件生成路径
# --host:指定arm编译器
# --with-ssl:支持https,这里直接填写上面openssl的生成路径
要注意的是,裁剪完后,会有提示信息,这里ssl support 为enabled即表示成功添加https支持,如果没有的话即使编译成功出来也无法https连接(注意所有源码编译路径不要有中文,我一开始放在中文路径编译,ssl support一直是no,后面换成没有中文的路径居然就可以了)

 

 接着就是执行编译安装

make -j4 & make install
实际应用
先用生成的在curl的安装目录bin下找到可执行文件,将其放到arm开发板

 

接着将openssl和curl安装路径下的lib文件也一起打包放到开发板(如果要节省空间就只打包动态库即可,so文件,编译的时候没关系,编译器优先链接动态库),注意,一定要打包,因为库文件有链接属性,如果直接复制会丢失链接属性,放到开发板后需要给设置环境变量,不然找不到库。

这个时候还无法执行程序,还需要证书文件,直接去官网下载,并放到开发板,设置环境变量

export CURL_CA_BUNDLE=/opt/cafile/cert.pem
接着执行命令

./curl -h|grep ssl
出现以下内容就说明可以支持https了 

 

 最后试着使用https post百度

./curl "https://www.baidu.com"
 出现以下内容就表示没问题了

 

 代码实现
直接用这个代码,编译的时候链接openssl和curl的头文件和库文件,然后放在板子执行,效果是一样的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "curl/curl.h"
 
int main(void)
{
    CURL *curl;
    CURLcode res;
 
    curl_global_init(CURL_GLOBAL_ALL);
    /* get a curl handle */
    curl = curl_easy_init();
 
    if (!curl) {
        return -1;
    }
    // 设置要访问的URL
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");
 
    /* specify we want to POST data */
    curl_easy_setopt(curl, CURLOPT_POST, 1L);
    
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "");
 
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
    curl_easy_setopt(curl, CURLOPT_CAINFO, "/opt/cafile/cacert.pem");
 
    curl_easy_setopt (curl,CURLOPT_TIMEOUT, 60L);
    curl_easy_setopt (curl,CURLOPT_CONNECTTIMEOUT, 10L);
 
    /*执行数据请求*/
    res = curl_easy_perform(curl);
    if(res !=CURLE_OK)
    {
        fprintf(stderr, "curl_easy_perform() failed: %s\n",
            curl_easy_strerror(res));
    }
 
    // 释放资源
    curl_easy_cleanup(curl);
    curl_global_cleanup();
 
    return 0;
}
希望我的文章对你有帮助!!!
————————————————
版权声明:本文为CSDN博主「yuansec」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lhh2333/article/details/132227655

--------------------------------------

需要的去原文看,其实tina编译的时候也是这么一套流程,写在cmake或者makefile里面

不用curl访问http

如果实在不想用curl访问http怎么办?有办法,这篇文章就是用的系统的函数实现http的获取

https://blog.csdn.net/sjin_1314/article/details/41776679

或者直接使用socket去手搓一个http的访问函数:

https://www.cnblogs.com/chorm590/p/c_http_get_201905081356.html