t113-c-libcurl开发
大名鼎鼎的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
完
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)