【问题标题】:Arduino save http variableArduino保存http变量
【发布时间】:2014-04-01 07:20:51
【问题描述】:

当我收到 HTTP 消息时,我想在 Arduino 上进行比较。我可以看到所有请求。 如何保存最后显示的“你好”并运行如下代码:如果“你好”,则执行一些操作。

char buffer;
while (client.connected()) {
while (client.available()) {
buffer = client.read();
Serial.print(buffer);
}}
Serial.println("Closing connection");
Serial.println("");
client.close();

串行监视器:

Connect to 192.168.2.101:80
Connected & Data sent
TTP/1.1 200 OK
Date: Sun, 30 Mar 2014 20:27:43 GMT
Server: Apache/2.2.25 (Win32) mod_ssl/2.2.25 OpenSSL/0.9.8y
X-Powered-By: ZendServer 6.3.0
Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
Connection: close
Content-Type: text/html

helloClosing connection

【问题讨论】:

    标签: c++ http variables arduino


    【解决方案1】:

    您需要解析 HTTP 请求。 由于 RAM 有限,将所有请求保存在内存中并不是一个好主意,但请查看请求:您有一个由 \n\r 分隔的标头列表,然后是一个空行 (\n\r),然后您需要什么。

    所以你必须寻找\n\r\n\r 然后保存结果。类似于:

    char what[] = "\r\n\r\n";
    String ris = "";
    int eq = 0;
    while (client.connected()) {
        while (client.available()) { //we assume all data to be in a single TCP packet.
            buffer = client.read();
            if (eq == 4){
                ris += buffer;
            }else{
                if (buffer == what[eq]){
                    eq++;
                }else{
                    eq = 0;
                }
            }
        }
        Serial.print("readed: ");
        Serial.println(ris);
        //here send answer
        client.close();
    }
    

    【讨论】:

    • 我尝试使用您的代码,但串行监视器中没有显示任何内容。像这样:已连接和已发送数据:
    • 也许...嗯,尝试删除 \r (然后将 EQ 的 if 减少到 2.. 或将其更改为 strlen(what),这样您就可以更改 what[] 而无需更多关注:)
    • 我真的不明白你的意思,我删除 \r,更改为 eq 2,没有任何工作...我发现这个:if(result.endsWith("hello")){ Serial .print("来自 php 的你好");它正在工作......
    • 除非你需要更多内存,否则它可以工作。你可以链接修改后的代码吗?
    • 我也做了一个 ram 测试,每个请求我总是有相同的 ram:8763,但我对你的解决方案感兴趣,也许更强大,随时编辑。 pastebin.com/4bS5uzAX,
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2020-09-13
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多