您尚未登录。

楼主 # 2025-03-24 09:37:59

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,405
积分: 1369.5

ML307A的https库使用问题。

/**
 * @brief 创建客户端实例
 *
 * @param [in] url              服务器地址(服务器地址url需要填写完整,例如(服务器url仅为格式示例)"https://39.106.55.200:80")
 * @param [in] callback         客户端相关回调函数(使用cm_httpclient_sync_request()同步接口可忽略该参数,传NULL即可)
 * @param [out] handle          实例句柄
 *
 * @return 0 成功/其他 失败(见cm_httpclient_ret_code_e)
 *
 * @details 创建客户端实例
 */
cm_httpclient_ret_code_e cm_httpclient_create(const uint8_t *url, cm_httpclient_event_callback_func callback, cm_httpclient_handle_t *handle);

例程是用这个函数连接百度网站,是https get。

ret = cm_httpclient_create((const uint8_t *)"https://www.baidu.com", __cm_httpclient_callback, &client);          //创建客户端实例
cm_httpclient_sync_param_t param = {HTTPCLIENT_REQUEST_GET, (const uint8_t *)"/", 0, NULL};          //GET方法,必须设置请求路径
ret = cm_httpclient_sync_request(client, param, &response);                         //发送请求,同步接口

且设置了ssl验证方法为单向验证,且设置了证书。可以成功get百度。
试过改成ssl验证方式为无身份验证,也可以成功get百度。

但是,我换成其他https网站,比如https:www.bing.com,或者其他,大都是无法成功https get的,直接返回个650错误。无论我设置无身份验证还是设单项验证+设置证书。
如果改为http get,则大都能收到返回,比如400.
这是为什么呢?按说这个作为4g模组,比如客户纯当at模组来用,应该能实现https连接吧。

看例程里有阿里云相关,看了下,没直接用这套cm_httpclient_create,而是直接用的lwip里的tcp相关。

最近编辑记录 Gentlepig (2025-03-24 09:41:08)

离线

楼主 #1 昨天 17:06:09

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,405
积分: 1369.5

Re: ML307A的https库使用问题。

联系到了一家代理的技术支持,告知这个问题。给了1.5.0的sdk,之前用的是1.4.6版本的。
使用该版本sdk,可正常进行https连接,用的是ssl无身份验证方式,可以成功,没试单向或双向证书验证。

另有两个问题记录下。
设置https的header,有cm_httpclient_specific_header_set()和cm_httpclient_custom_header_set()两个函数,不知道有啥区别,最后用了specific这个函数。想多次调用这个函数设置多个header项,发现只有最后一个能成功,后来才明白,需要一次性设置。header字符串里每个子项之间用\r\n间隔。
这个在文档里没有写明。

上电后参考例程里,等待网络通讯正常且同步ntp日期后,才进行https发送。结果第一次https发送有几率返回650,在第一https发送前加了5秒延时后问题解决。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn