This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI-RTOS
你(们)好
我想在设备上实施 https 客户端以连接到以下格式的服务器:[subdomain].firebaseio.com
通过添加相应的掩码、方法和证书、我在使用 cc3200 SDK example-http 客户端演示时成功完成了此操作。
但是当它到 tirtos 时--
httpcli.h 和 httpcli.c 文件不同。 httpcli.h 文件中提供了一个示例、如下所示:
//发出 HTTP 1.1 POST 请求 *// *//将请求发送到服务器: *// *// POST /index.html HTTP/1.1 *//主机:www.example.com * HTTPCLI_sendRequest (&CLI、HTTPStd_POST、"/index.html"、TRUE); * //发送其他字段 *// *//*//内容长度: *// * HTTPCLI_sendField (&CLI、HTTPStd_field_name_content_length、len、true); * //发送请求正文 *// *// * HTTPCLI_sendRequestBody (&CLI、data、strlen (data)); * //获取已处理的响应状态 *// *// HTTP/1.1 200 OK * status = HTTPCli_getResponseStatus (&CLI); * //检查 HTTP 返回状态并处理剩余响应 * if (status = HTTPStd_OK) 执行{ * //过滤响应标头并获取设置响应字段 * // * //... * //内容类型:text/xml;charset=UTF-8。\r\n * //内容长度:34 * //... * RET = HTTPCli_getResponseField (&CLI、buf、sizeof (buf)、&moreFlag); * //如果字段是内容长度 *,则以 buf 为单位处理数据 //零是 respfields 数组 中内容长度的索引* 如果(ret =0){ * len =(int) strtoul (buf、NULL、0); *} * *} while (ret!= HTTPCLI_FIELD_ID_END); * while (len > 0){ * len -= HTTPCLI_readRawResponseBody (&CLI、buf、sizeof (buf)); * //... 处理 buf 数据并保存... *} *} * * HTTPCLI_DISCONNECT (&CLI); * HTTPCLI_析 构(&CLI);
但在 tirtos 文件夹中找不到中的 sssl.h 文件。 TIRTOS 版本: tirtos_cc32xx_2_16_01_14
我认为我们必须为此使用 tls.h 文件,我尝试了以下代码,但仍出现错误
HTTPCli_StructCLI; HTTPCli_Params cli_param; //请求字段 HTTPCL_Field field[4]={ {HTTPCli_field_name_host、host_name}、 {HTTPCL_field_name_accept、"*/*"}、 {HTTPCL_field_name_content_length} "0"}、 {NULL、NULL} }; //响应字段过滤器 const char * respFields[2]={ HTTPStd_field_name_content_length、 NULL }; const char * IDs[4]={ HTTPCLI_field_name_content_length、 HTTPCLI_field_name_connection, HTTPCL_name_type_name_connection, HTTPCol_name_name_name_name_type_content_type_type_content_type__content_type__content_type__ moreFlag; long lRetVal =-1; struct sockaddr_in addr; lRetVal = sl_NetAppDnsGetHostByName (signed char *) host_name、 strlen ((const char *) host_name)、 sipg_ulDestinationIP、sl_Af_iNet; if (lnston_char *) 、host_r_r_r\n al_dr.alt = r_r_r.alt; slDateTimer_t dt; //////*设置当前验证证书的日期*/dt.sl_tm_day = 4; dt.sl_tm_mon = 1; dt.sl_tm_year = 2017; dt.sl_tm_hour = 9; dt.sl_tm_min = 39; dt.sl_tm_sec = 00; sl_DevSet (sl_device_General_configuration、 sl_device_General_configuration_date_time、 sizeof (SlDateTime_t)、(unsigned char *)(&dt)); TLS_Handle TLS; #define SL_CA_CERT "cert1.cer" 结构 TLS_PARAMS 参数; TLS_PARAMS_INIT (¶ms); 字符存储[10]; memset (storage、0、10); memcpy (storage、SL_CA_CERT、strlen (sl_CA_CERT)); params.ca=storage; UART_PRINT ("params.ca=%s\n\r",params.ca); params.calen=strlen(SL_CA_CERT); UART_PRINT"("params.calen=%d\n\r",params.calen); *(params.ca+params.calen)='\0';) TLS=TLS_create (TLS_METHOD_CLIENT_TLSv1_2、¶ms、"cert"); if (TLS==NULL) { UART_PRINT ("NULL"); } else { UART_PRINT ("TLS handle not null =>"); UART_PRINT ("handle =%p\n"tls"、TLS); }UART_CLI_param=param.param.param=TLS.param=20 ; UART_PRINT ("cli.tls=%p\n\r"、cli.tls"); //构造静态 HTTP 客户端实例 HTTPCli_construct(&CLI); //连接到 HTTP 服务器 lRetVal=HTTPCli_connect (&CLI、(struct kadr *)&adVal、HTTPCLI_TYPE_TLS ( 如果 未连接)、则为<UART_LPRINT0=HTTCLIF"
输出误差为:
HTTP GET 开始: dnsipget=0 params.ca=cert1.cer params.calen=9 TLS handle not null=>TLS handle=2001b440 cli.tls=2001b440 lRetVal=-102not connected connectval=-102sendreq=-103status=-104HTTP GET 失败。 HTTP GET 结束:
请指导我进行此操作
谢谢
AV
大家好、
您似乎没有设置请求和响应字段、您的代码应如下所示:
HTTPCLI_construct(&CLI); HTTPCLI_setRequestFields(&CL, Fields); HTTPCLI_setResponseFields(&CL, respFields);
然后、您可以调用 HTTPCli_connect。
希望这对您有所帮助、
Gerardo
你(们)好 Gerardo
该错误出现在 HTTPCli_connect API 中的 connect (sl_connect)函数处。 我不相信“设置字段”选项会影响这一点。 但是我已经按照您的建议尝试设置请求/响应字段、错误仍然存在。
在 rtsc 项目中、我还尝试使用 RAW 套接字方法(SSL 演示例中使用的方法)进行连接。 但在这种情况下、sl_connect 仍然会产生-370错误。(我更喜欢使用 https://fchi API)
但我在使用 http 客户端演示和 SSL 演示(两个 SDK 项目)时成功地使用我的(方法+mask+certificate)配置与服务器连接。对于 tirtos https 客户端、我无法在其中找到足够的文档。
我是否需要任何其他方加载项或 tirtos 是否支持 SSL/TLS 库?
如果 tls.h 、tls_sl.h 和 TLS_SL.c (C:\ti_tirtos_cc32xx_2_16_01_14\products\ns_1_11_00_10\packages/ti\net)是设置安全参数所需的文件-您能指导我如何正确使用这些 API。
再次感谢
AV
你(们)好
我能够使用 httpcli API 本身连接到安全服务器。 要设置安全参数,我使用了 tls.h、tls_sl.h 和 TLS_SL.c 中的 TLS API
现在:
在 SSL 演示(SDK 项目)中、我找到 了一个用于 SECURE_DOMAIN_NAME_VERIFICATION 的选项。
但 tirtos 的 socket.h 中不存在此定义(它存在于 cc3200 sdk socket.h 中)
因此,我将其添加到 socket.h 文件中: #define SO_SECURE_DOMAIN_NAME_VERIFICATION (35)
这是正确的方法吗? (一旦我这么做、sl_setsockopt 返回0)
感谢您的帮助和支持
AV