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.

[参考译文] CC3200:CC3200 -获取方法失败、出现404或302 (当 postman 或仅使用浏览器时)

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1131337/cc3200-cc3200---get-method-fails-with-404-or-302-while-postman-or-just-using-browser-works

器件型号:CC3200

大家好

我正在尝试使用 http_client_demo 示例实现 get 方法、  

在使用 "httpbin.org 和"/get"进行测试时、它工作正常、我获得200个状态、

但是、对于我自己的主机、我失败了(404或302)、尽管它可以与 postman 和我的 Chrome 浏览器一起使用、但为什么会收到一个可以与 Postman 一起使用的地址请求、那么我的 CC3200上会返回404或302的状态?

谢谢

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

    您好 Amud、

    要清楚一点、cc3200在连接到互联网时没有问题是正确的吗? 例如、如果您要 ping google.com 或8.8.8.8、它是否起作用?

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

    你(们)好

    感谢您的响应、cc3200能够正确连接到互联网、我成功地从服务器获得了对 POST 请求的正确响应、并得到了从另一台服务器获得的正确响应。

    问题是从我的服务器获得 GET 响应、我得到404、在另一个测试中得到302

    谢谢。  

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

    Amud、您好!

    您能否发布 执行这些操作的源代码?

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

    您好、Sabeeh、

    好的、这是我的"Get"方法测试代码:

    #define APPLICATION_VERSION "1.4.0"
    #define APP_NAME            "HTTP Client"
    #define POST_REQUEST_URI 	"/post"
    //#define POST_REQUEST_URI    "/info.0.json"
    #define POST_REQUEST_URI    "/metadata/TheAdventuresOfTomSawyer_201303"
    #define POST_DATA           "{}"
    #define DELETE_REQUEST_URI 	"/delete"
    #define PUT_REQUEST_URI 	"/put"
    #define PUT_DATA            "PUT request."
    #define GET_REQUEST_URI     "/get"
    #define HOST_NAME           "httpbin.org" //"<host name
    
    #define HOST_NAME_GET "www.amudraa.com"
    #define GET_REQUEST_URI_TERMINAL     "/terminal"
    
    static int HTTPGetAmudMethod(HTTPCli_Handle httpClient)
    {
    
        long lRetVal = 0;
        HTTPCli_Field fields[4] = {
    
                                    {HTTPCli_FIELD_NAME_HOST, HOST_NAME_GET},
                                    {HTTPCli_FIELD_NAME_ACCEPT, "*/*"},
                                    {HTTPCli_FIELD_NAME_CONTENT_LENGTH, "0"},
                                    {NULL, NULL}
                                };
        bool        moreFlags;
    
    
        /* Set request header fields to be send for HTTP request. */
        HTTPCli_setRequestFields(httpClient, fields);
    
        /* Send GET method request. */
        /* Here we are setting moreFlags = 0 as there are no more header fields need to send
           at later stage. Please refer HTTP Library API documentaion @ HTTPCli_sendRequest
           for more information.
        */
        moreFlags = 0;
        lRetVal = HTTPCli_sendRequest(httpClient, HTTPCli_METHOD_GET, GET_REQUEST_URI_TERMINAL, moreFlags);
        if(lRetVal < 0)
        {
            UART_PRINT("Failed to send HTTP GET request.\n\r");
            return lRetVal;
        }
    
    
        lRetVal = readResponse(httpClient);
    
        return lRetVal;
    }
    
    //*****************************************************************************
    //
    //! \brief HTTP GET Demonstration
    //!
    //! \param[in]  httpClient - Pointer to http client
    //!
    //! \return 0 on success else error code on failure
    //!
    //*****************************************************************************
    static int HTTPGetMethod(HTTPCli_Handle httpClient)
    {
      
        long lRetVal = 0;
        HTTPCli_Field fields[4] = {
                                    {HTTPCli_FIELD_NAME_HOST, HOST_NAME},
                                    {HTTPCli_FIELD_NAME_ACCEPT, "*/*"},
                                    {HTTPCli_FIELD_NAME_CONTENT_LENGTH, "0"},
                                    {NULL, NULL}
                                };
        bool        moreFlags;
        
        
        /* Set request header fields to be send for HTTP request. */
        HTTPCli_setRequestFields(httpClient, fields);
    
        /* Send GET method request. */
        /* Here we are setting moreFlags = 0 as there are no more header fields need to send
           at later stage. Please refer HTTP Library API documentaion @ HTTPCli_sendRequest
           for more information.
        */
        moreFlags = 0;
        lRetVal = HTTPCli_sendRequest(httpClient, HTTPCli_METHOD_GET, GET_REQUEST_URI, moreFlags);
        if(lRetVal < 0)
        {
            UART_PRINT("Failed to send HTTP GET request.\n\r");
            return lRetVal;
        }
    
    
        lRetVal = readResponse(httpClient);
    
        return lRetVal;
    }
    
    
    int main()
    {
        long lRetVal = -1;
        HTTPCli_Struct httpClient;
    
    
        //
        // Board Initialization
        //
        BoardInit();
    
        //
        // Configure the pinmux settings for the peripherals exercised
        //
        PinMuxConfig();
    
        //
        // Configuring UART
        //
        InitTerm();
    
        //
        // Display banner
        //
        DisplayBanner(APP_NAME);
    
        InitializeAppVariables();
    
        lRetVal = ConnectToAP();
        if(lRetVal < 0)
        {
            LOOP_FOREVER();
        }
    
        lRetVal = ConnectToHTTPServer(&httpClient);
        if(lRetVal < 0)
        {
            LOOP_FOREVER();
        }
    
        //---------------------------
        UART_PRINT("\n\r");
        UART_PRINT("HTTP Get BIN Begin:\n\r");
        lRetVal = HTTPGetBinMethod(&httpClient);
        if(lRetVal < 0)
        {
            UART_PRINT("HTTP Post Get Bin failed.\n\r");
        }
        UART_PRINT("HTTP Get Bin End:\n\r");
        UART_PRINT("\n\r");
    
        //---------------------------
        UART_PRINT("\n\r");
        UART_PRINT("HTTP Get Amud Begin:\n\r");
        lRetVal = HTTPGetAmudMethod(&httpClient);
        if(lRetVal < 0)
        {
            UART_PRINT("HTTP Post Get Amud failed.\n\r");
        }
        UART_PRINT("HTTP Get Amud End:\n\r");
        UART_PRINT("\n\r");
    

    这是终端:(我已编辑我的 wifi 网络名称和 IP )的结果

    *************************************************
    CC3200 HTTP Client Application
    *************************************************
    
    
    
    Host Driver Version: 1.0.1.14
    Build Version 2.11.0.1.31.1.5.0.2.1.0.3.37
    Device is configured in default state
    Device started as STATION
    [WLAN EVENT] STA Connected to the AP: ------ , BSSID: f0:b0:14:2f:4c:d7
    [NETAPP EVENT] IP Acquired: IP=------ , Gateway=192.168.178.1
    Connected to the AP: ------
    Connection to server created successfully
    
    HTTP Get BIN Begin:
    HTTP getResponseStatus 200
    HTTP Status 200
    Content-Type : application/json=1
    Successfully parsed 17 JSON tokens
    HTTP Get Bin End:
    
    
    HTTP Get Amud Begin:
    HTTP getResponseStatus 404
    File not found.
    HTTP Get Amud End:

    谢谢!

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

    大家好、有没有机会在这个问题上获得帮助?

    谢谢

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

    您好 Amud、

    我会尝试连接到另一台主机、例如 example.com。 这将排除代码或主机的问题。 此外、浏览您的代码、我看到您调用了该函数  

    lRetVal = HTTPGetBinMethod (&httpClient);

    但我看不到它的定义。

    此致、

    Rogelio

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

    你(们)好,Rogelio

    这是实现方案、这正是我尝试的另一个示例-连接到"httpbin.org",as、我在 使用 "httpbin.org 和"/get"进行测试时说过、它可以正常工作、我获得200个状态、

    #define HOST_NAME_BIN "httpbin.org"
    #define GET_REQUEST_URI_BIN     "/get"
    
    static int HTTPGetBinMethod(HTTPCli_Handle httpClient)
    {
    
        long lRetVal = 0;
        HTTPCli_Field fields[4] = {
    
                                    {HTTPCli_FIELD_NAME_HOST, HOST_NAME_BIN},
                                    {HTTPCli_FIELD_NAME_ACCEPT, "*/*"},
                                    {HTTPCli_FIELD_NAME_CONTENT_LENGTH, "0"},
                                    {NULL, NULL}
                                };
        bool        moreFlags;
    
    
        /* Set request header fields to be send for HTTP request. */
        HTTPCli_setRequestFields(httpClient, fields);
    
        /* Send GET method request. */
        /* Here we are setting moreFlags = 0 as there are no more header fields need to send
           at later stage. Please refer HTTP Library API documentaion @ HTTPCli_sendRequest
           for more information.
        */
        moreFlags = 0;
        lRetVal = HTTPCli_sendRequest(httpClient, HTTPCli_METHOD_GET, GET_REQUEST_URI_BIN, moreFlags);
        if(lRetVal < 0)
        {
            UART_PRINT("Failed to send HTTP GET request.\n\r");
            return lRetVal;
        }
    
    
        lRetVal = readResponse(httpClient);
    
        return lRetVal;
    }

    问题是从 www.amudraa.com/terminal"实现了"get"、正如我说过的、它通过 Postman 工作

    谢谢

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

    您好!

    当您通过网络监听器(Wireshark、tcpdump 等)捕获通信时、您会看到什么?

    1月

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

    Amud、您好!  

    您的主机是 http 还是 https?

    如果是 https、我会查看这些 e2e 线程。

    https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/869603/launchxl-cc3235sf-httpget-demo-works-with-http-fails-with-https

    https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/663977/ccs-cc3220s-launchxl-http-and-https-client-sample-codes-utilizing-the-latest-simplelink-sdk-1-60-00-04-http-client-library/2444798#2444798

    此致、

    Rogelio