2015-09-04 2 views
2

Извините, что беспокоиться о чем-то, что должно быть легко.Что не так с моим запросом GET?

У меня есть этот запрос 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) 

И если я использую другой хост (given is this example) это работает:

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) 
+0

Вы используете фильтрацию IP? Это означает, что ожидаются разные результаты на основе удаленного IP-адреса? – Mike

+0

Покажите, как вы строите запрос? У вас есть сетевой захват запроса? –

+0

Возможно, сервер отрицает этот конкретный «User-Agent»? – hjpotter92

ответ

0

Это ваша строка запроса сервер Безразлично» t нравится. Это сделает работу:

GET http://httpbin.org/ip HTTP/1.1 
Host: httpbin.org 
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.

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) 

см. Ссылку here.