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.

[参考译文] CC3235MODASF:AT 命令的无热模式

Guru**** 2538950 points
Other Parts Discussed in Thread: CC3235MODASF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1020300/cc3235modasf-hotsless-mode-at-commands

器件型号:CC3235MODASF

您好!

我们公司购买了 CC3235MODASF 评估套件。  

我的任务是将套件用作无主机模式、并通过 HttpClient 命令向具有基本身份验证的服务器发送 GET 请求。

有足够的文档来启动套件并连接到预定义的 Wi-Fi 网络、但不足以使用 HTTP 客户端。

下面是我的流程:

1.连接到网络(预定义的 SSID 和密码)

2.创建 HTTP 客户端(HTTPCreate)

3.将 HTTP 连接到主机(使用 HTTPConnect AT 命令)  

4.set HTTP 标头(使用 HTTPSetHeader AT Command)(将数据解析为简单字符串)

5.发送请求  

我收到401错误代码、这是奇怪的、因为我使用 Postman 检查了身份验证、它工作正常。

所以我认为问题不在于编码 。

此外、我已尝试向其他主机发送请求、并成功获得响应。

P.S:我使用 Python 和 pySerial 来发送 AT 命令、并使用 base64对身份验证进行编码。

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

    您好、Eduard、

    如果不 详细了解设置、我就不知道为什么 HTTP 服务器会返回未经授权的响应。 您可以尝试打印 HTTP 请求标头、并将其与工作设置进行比较。

    此 E2E 主题 更详细地讨论了如何调试401错误。 按照此主题中的建议,您可以将 source/ti/net/http/httpclient.c 直接添加到 IDE 项目中,并在 sprintsock_send()之后在 sprint()中添加一个 UART_PRINT ,以便 将  CLI_>validBufStart 打印到终端。

    此致、

    Sarah

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

    我发现我可以使用 httpbin.org 发送 GET 请求、服务器将使用它接收到的标头进行回复、以便我可以检查标头参数。

    因此、我使用我的数据配置了标头用户代理、并发送了请求。 服务器使用相同的用户代理进行了应答、因此设置标头 对我有效。

    这是我在 python 中的脚本的一部分:

        # Defining Request Header
        send_at_cmd(f'AT+HttpSetHeader={http_client_index},req_host,persistent,0,{len(api_host)},{api_host}')
        send_at_cmd(f'AT+HttpSetHeader={http_client_index},req_auth,persistent,0,{len(auth_b64)},"{auth_b64}"') # params containing spaces must be enclosed with ""
        send_at_cmd(f'AT+HttpSetHeader={http_client_index},req_user_agent,persistent,0,{len(user_agent)},{user_agent}')
    
        response = send_at_cmd(f"AT+HttpConnect={http_client_index},https://{api_host},,,,")
    
        if response['ok']:
            # Sending Request
            response = send_at_cmd(f"AT+HttpSendReq={http_client_index},get,{req_uri},,,,")
            
            # Reading Response
            if response and response['ok']:
                if int(response['values'][0]) == 200:
                    print("")
                    send_at_cmd(f"AT+HttpReadResBody={http_client_index},0,1024")
                elif int(response['values'][0]) >= 500:
                    print("")
                    print(" -------------------  Server Error  -------------------  ")
                elif int(response['values'][0]) >= 400:
                    print("")
                    print(" -------------------  Client Error  -------------------  ")

    send_at_cmd 是一个简单的函数,用于通过 UART 发送字符串,等待响应并读取其值。

    Python 版本3.8.1,pyserial 版本3.5。

    注:尝试访问的服务器使用 HTTPS。

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

    您好、Eduard、

    服务器是否有错误日志可以告诉您为什么拒绝连接?

    此致、

    Sarah

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

    发现了我遇到的问题!

    供将来参考:

    显然我的流程不正确。 我在建立 HTTP 连接之前更改了流以设置标头、但我不设置主机标头字段(在我设置时用于获取3019错误)、因为我猜在设置连接时它会自动更新。