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.

[参考译文] 使用 cc3220启用 Cookie

Guru**** 2555630 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/750039/enabling-cookies-with-cc3220

器件型号:CC3220SF-LAUNCHXL

工具/软件:TI-RTOS

您好!

SDK 中有两个有关 Cookie 的头参数、 HttpClient_HFIELD_RES_SET_cookie 和 HttpClient_HFIELD_REQ_cookie、但我认为 HttpClient_HFIELD_RES_SET_TLS 可以设置、但我无法从某些测试 Cookie (https)网页中设置 Cookie。 我们如何设置 Cookie 信息并使用?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我自己没有尝试过、但 服务器使用 Cookie 令牌在标头中发送 HttpClient_HFIELD_RES_SET_cookie。

    客户端在通过 HttpClient_HFIELD_REQ_Cookie 传输到服务器时需要将其包含回。

    此致、
    Shlomi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回答:Shlomi。 HttpClient_HFIELD_RES_SET_Cookie 从服务器返回 NULL、服务器中包含 Cookie、因此它不起作用。 下面是一个从我的服务器返回的示例、0、1、2、3。。。 这意味着 SDK 中列出的响应标头、位于环路内部。

    18是 set-cookie 参数:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因此、如果您没有从服务器获取 Cookie、您希望如何使用它? 我缺少什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    例如、当我尝试测试 Google 服务器时、我可以使用 postman 查看此信息。

    有 Cookie 信息、但无法显示在设备上。 TI SDK 的头文件解析器可能存在问题? 我在解析之前尝试获取整个字符串、但无法获取。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的 cc3220器件的 UART 日志。 我将所有信息打印到 UART 以检查标头。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否详细说明您使用了哪些 http API?

    HttpClient_setHeader()应用于请求标头(传出请求中的内容)和响应标头(从服务器获取的,即如果需要,可以过滤 NWP 上的标头)。

    默认情况下、如果未设置任何请求标头、则所有标头都将具有大小限制、可以在 httpclient.h 头文件中读取这些标头。

    因此、可能接头太长。 在这种情况下,您可以尝试使用 HttpClient_setHeader()如上所示过滤一些长头文件。

    要读取 Cookie 标头,应使用 HttpClient_getHeader()和 HttpClient_HFIELD_RES_SET_cookie 选项。

    此致、

    Shlomi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shlomi、

    我会像您所写的那样使用 httpclient.c。 您可以在下面看到我的代码。 对于标头大小、我在 httpclient_internal.h 中找到了 MAX_HEADER_LEN 参数并对其进行了更改、但它不起作用。

    谢谢。

    int16_t getHeaders (HttpClient_Handle handle){ //函数返回所有头文件
    
    int16_t ret = 0;
    字符数据[1000];
    memset (data、0、sizeof (data));
    uint8_t i;
    
    对于(i = 0;i<26;i++){
    if (i<26)
    RET = HttpClient_getHeader (handle、i、data、sizeof (data)、HttpClient_HFIELD_persistent);
    UART_PRINT ("%d %d:%s \n"、ret、i、data);
    memset (data、0、sizeof (data));
    }
    
    return;
    }
    
    
    void setHeaders (HttpClient_handle httpClientHandle){
    
    int16_t ret = 0;
    
    ret = HttpClient_SETOPT (httpClientHandle、HttpClient_redirect_tls_downgrade、1、1、1、 0);
    
    if (ret < 0)
    {
    printError ("httpTask: Setting options failed"、ret);
    }
    
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_USER_AGENT、
    USER_AGENT、strlen (USER_AGENT)、
    HttpClient_HFIELD_PERSISTENT);
    
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_Accept、
    接受、strlen (接受)、
    HttpClient_HFIELD_PERSISTENT);
    
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_Accept_encoding、
    Accept_encoding、strlen (Accept_encoding)、
    HttpClient_HFIELD_PERSISTENT);
    
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_cache_control、
    cache_CTRL、strlen (cache_CTRL)、
    HttpClient_HFIELD_PERSISTENT);
    
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_content_type、
    content_type、strlen (content_type)、
    HttpClient_HFIELD_PERSISTENT);
    
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    
    
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_CONNECTION、
    连接、strlen (连接)、
    HttpClient_HFIELD_PERSISTENT);
    
    
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您的代码看起来正常。

    是否可以尝试将 http 库中的 HttpClient_BUF_LEN 增大到大于256的值并重试?

    谢谢、

    Shlomi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我已经尝试增加 HttpClient_BUF_LEN 和 MAX_HEADER_LEN、并尝试了它、但没有改变。 顺便说一下、我可以得到第25个(最后一个)参数、因此我认为第18个标头的缓冲区存在问题、或者可能会解析参数。 在解析之前、我找不到将所有标头作为单个字符串的方法。 您认为我可以获取所有缓冲区吗?如果是、如何获取? 我认为这会更好。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据我所知、API 可根据 选项逐个获取。 如果您尝试在不连续调用其他选项的情况下调用第18个选项、该怎么办?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、Shlomi、

    这不奏效。 以便我将 https 连接部分实现到 HttpGE.c 演示应用程序。 您只需要更改这2个文件(附加)、从另一个演示项目和证书中实现 UART_TERM.c 和 uart_term.h 文件。 它需要来自 UART 的服务器参数、所有信息都来自 UART、很抱歉未进行注释。我使用 CCS  版本:8.1.0.00011和 TI v18.1.4.LTS 编译器和 simplelink_cc32xx_sdk_2_30_00_05

    e2e.ti.com/.../httpget.rar

    e2e.ti.com/.../6457.platform.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉,我早就把你的答复删去了。

    您是否能够解决该问题?

    如果没有、我可以使用您的文件在本地尝试、并告知您。

    此致、

    Shlomi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好,我们没有听到您的反馈,我假设您能够解决您的问题。 如果没有、只需在下面发布回复(如果该线程由于超时而锁定、则创建新线程)–谢谢