0

我试图从 ESP8266 和像 www.httpbin.org 这样的测试服务器建立连接以获取一些数据。我一直在连接中遇到问题。我正在使用一个非常简单的代码(不包括与本地 WiFi 的明显连接),如下所示:

net.dns.setdnsserver("8.8.8.8",1)
net.dns.resolve("httpbin.org", function(server_ip)
    if (server_ip == nil) then print("DNS fail!") else

        print(server_ip)

        conn=net.createConnection(net.TCP, 0)

        conn:on("receive", function(conn, payload) 
                        print('\nReceived\n')
                        print(payload)
                        end )

        conn:on("connection", function(conn, payload) 
                        print('\nConnected') 
                        conn:send("HTTP/1.1\r\n"
                        .."Host: httpbin.org/get\r\n"
                        .."Connection: keep-alive\r\n"
                        .."Accept: */*\r\n\r\n")
                       end) 

        conn:connect(80, server_ip)

        end
    end)

我得到 print(server_ip) 返回的结果

userdata: 3fff1b80

并且连接挂起(我从来没有打印任何消息)。我究竟做错了什么?谢谢。

4

1 回答 1

0

你快到了。尝试这个:

net.dns.setdnsserver("8.8.8.8", 1)
net.dns.resolve("httpbin.org", function(sk, server_ip)
    if (server_ip == nil) then print("DNS fail!") else

        print(server_ip)

        conn = net.createConnection(net.TCP, 0)

        conn:on("receive", function(conn, payload)
            print("Received: " .. payload)
        end)

        conn:on("connection", function(conn, payload)
            print("Connected")
            conn:send("GET /get HTTP/1.1\r\n"
                    .. "Host: httpbin.org\r\n"
                    .. "Connection: keep-alive\r\n"
                    .. "Accept: */*\r\n\r\n")
        end)

        conn:connect(80, server_ip)
    end
end)

我改变了两件事:

  • 根据文档,回调net.dns.resolve2 个参数(套接字和 IP 地址)
  • HTTP 标头错误:
    • host真的只是主持人
    • 但是 HTTP 动词和路径丢失了GET /get HTTP/1.1

当然,您也可以将其简化为:

conn = net.createConnection(net.TCP, 0)

conn:on("receive", function(conn, payload)
    print("Received: " .. payload)
end)

conn:on("connection", function(conn, payload)
    print("Connected")
    conn:send("GET /get HTTP/1.1\r\n"
            .. "Host: httpbin.org\r\n"
            .. "Connection: keep-alive\r\n"
            .. "Accept: */*\r\n\r\n")
end)

conn:connect(80, "httpbin.org")
于 2016-04-21T18:34:13.273 回答