bixente57
bixente57

Reputation: 1348

What is wrong with my GET request?

Sorry to bother with something that should be easy.

I have this HTTP GET request:

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

When I send this request via my ESP8266 it returns a 404 error:

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

But when I (and you) go to http://httpbin.org/ip it works perfectly!

What is wrong?

DETAILS

I construct my request in 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)

And if I use another host (given is this example) it works:

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)

Upvotes: 2

Views: 1709

Answers (3)

Ruchira Rodrigo
Ruchira Rodrigo

Reputation: 41

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)

see the reference here.

Upvotes: 1

nickandrew
nickandrew

Reputation: 66

Are you actually connecting to httpbin.org ? Or somewhere else?

I just tried issuing your request by typing it into telnet, and it worked for me. But the server responding was nginx, whereas your example shows 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.

When I try another request with some other URI to force a 404 response, I see this:

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

Which again is nothing like the response you said you got from httpbin.org.

Upvotes: 2

Forivin
Forivin

Reputation: 15508

It's your request line the server doesn't like. This will do the job:

GET http://httpbin.org/ip HTTP/1.1
Host: httpbin.org

Upvotes: 0

Related Questions