/**
* @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.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秒延时后问题解决。
离线