2

很抱歉打扰了一些应该很容易的事情。

我有这个 HTTP GET 请求:

GET /ip HTTP/1.1
Host: httpbin.org
Connection: close
Accept: */*
User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)

当我通过 ESP8266 发送此请求时,它返回 404 错误:

HTTP/1.1 404 Not Found
Date: Fri, 04 Sep 2015 16:34:46 GMT
Server: Apache
Content-Length: 1363
X-Frame-Options: deny
Connection: close
Content-Type: text/html

但是当我(和你)去http://httpbin.org/ip它时,它的效果很好!

怎么了?

细节

我在 Lua 中构建我的请求:

conn:on("connection", function(conn, payload)
    print('\nConnected')
    req = "GET /ip"
    .." HTTP/1.1\r\n"
    .."Host: httpbin.org\r\n"
    .."Connection: close\r\n"
    .."Accept: */*\r\n"
    .."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
    .."\r\n"
    print(req)
    conn:send(req)
end)

如果我使用另一台主机(给出的是这个例子)它可以工作:

conn:on("connection", function(conn, payload)
    print('\nConnected')
    conn:send("GET /esp8266/test.php?"
    .."T="..(tmr.now()-Tstart)
    .."&heap="..node.heap()
    .." HTTP/1.1\r\n"
    .."Host: benlo.com\r\n"
    .."Connection: close\r\n"
    .."Accept: */*\r\n"
    .."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
    .."\r\n")
end)
4

3 回答 3

2

你真的连接到 httpbin.org 吗?或者别的地方?

我刚刚尝试通过在 telnet 中输入您的请求来发出您的请求,它对我有用。但是响应的服务器是 nginx,而您的示例显示的是 apache。

$ telnet httpbin.org 80
Trying 54.175.219.8...
Connected to httpbin.org.
Escape character is '^]'.
GET /ip HTTP/1.1
Host: httpbin.org
Connection: close
Accept: */*
User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 07 Oct 2015 06:08:40 GMT
Content-Type: application/json
Content-Length: 32
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

{
  "origin": "124.149.55.34"
}
Connection closed by foreign host.

当我尝试使用其他 URI 进行另一个请求以强制执行 404 响应时,我看到以下内容:

HTTP/1.1 404 NOT FOUND
Server: nginx
Date: Wed, 07 Oct 2015 06:12:21 GMT
Content-Type: text/html
Content-Length: 233
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

这又与您所说的从 httpbin.org 得到的响应完全不同。

于 2015-10-07T06:13:49.553 回答
1
http.get("http://httpbin.org/ip", nil, function(code, data)
   if (code < 0) then
      print("HTTP request failed")
   else
      print(code, data)
   end
end)

http.post('http://httpbin.org/post',
    'Content-Type: application/json\r\n',
    '{"hello":"world"}',
    function(code, data)
        if (code < 0) then
          print("HTTP request failed")
       else
          print(code, data)
       end
     end)

请参阅此处的参考资料。

于 2017-01-15T16:38:39.597 回答
0

这是服务器不喜欢的请求行。这将完成这项工作:

GET http://httpbin.org/ip HTTP/1.1
Host: httpbin.org
于 2015-09-04T18:51:32.280 回答