嵌入式arm开发板使用curl+openssl实现https通信

前言

        最近做一个项目,需要在arm开发板实现https post功能,一开始按照网上的教程,将curl库移植到arm开发板,但是发现我移植的curl不支持https,后面继续查才知道curl库默认是不支持https的,要支持的话需要在移植的时候加入openssl库。

移植环境

虚拟机: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;
}

希望我的文章对你有帮助!!!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值