при использовании GET
данные не будут присутствовать в теле запроса, поэтому sys.stdin.read()
обязательно завершится с ошибкой.вместо этого вы можете захотеть взглянуть на окружение, в частности os.environ['QUERY_STRING']
Еще одна странная вещь, которую вы делаете, - вы не используете правильный формат запроса.Вторая часть запроса не должна включать схему URL, хост или порт, она должна выглядеть следующим образом:
GET /?number=28 HTTP/1.0
указывать хост в отдельном заголовке Host:
;сервер сам определит схему.
При использовании POST
большинство серверов не будут считывать количество данных в заголовке Content-Length
, что, если вы его не предоставите, можетпредполагается, что это нулевые байты.Сервер может попытаться прочитать любые байты после точки, заданной длиной содержимого, чтобы быть следующим запросом в постоянном соединении, и когда он не начинается с действительного запроса, он закрывает соединение.Итак, в основном:
POST / HTTP/1.0
Host: localhost: 8080
Content-Length: 2
Content-Type: text/plain
28
Но почему вы тестируете это в telnet?Как насчет curl?
$ curl -vs -d'28' -H'Content-Type: text/plain' http://localhost:8004/
* About to connect() to localhost port 8004 (#0)
* Trying ::1... Connection refused
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 8004 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.20.1 (x86_64-redhat-linux-gnu) libcurl/7.20.1 NSS/3.12.6.2 zlib/1.2.3 libidn/1.16 libssh2/1.2.4
> Host: localhost:8004
> Accept: */*
> Content-Type: text/plain
> Content-Length: 2
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Thu, 07 Jul 2011 22:09:17 GMT
< Server: WSGIServer/0.1 Python/2.6.4
< Content-Type: text/html; charset=UTF-8
< Content-Length: 45
<
* Closing connection #0
{'body': '28', 'method': 'POST', 'query': []}
или еще лучше, в python:
>>> import httplib
>>> headers = {"Content-type": "text/plain",
... "Accept": "text/plain"}
>>>
>>> conn = httplib.HTTPConnection("localhost:8004")
>>> conn.request("POST", "/", "28", headers)
>>> response = conn.getresponse()
>>> print response.read()
{'body': '28', 'method': 'POST', 'query': []}
>>>