Thread 中讨论的其他器件:CC3200
工具/软件: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