跳转到主要内容

一个简单的Python HTTP服务器,它尝试以最合理的方式将请求在响应中回显

项目描述

一个简单的Python HTTP服务器,它尝试以最合理的方式将请求在响应中回显

提供一个简单的HTTP服务器,尝试以尽可能合理的方式将请求在响应中回显。这可以用于测试、调试、在具有硬编码假设需要HTTP请求的系统中构建本地服务器等。

$ python -m httpdecho
Echoing HTTP at https://127.0.0.1:8000 ...

示例

未指定端口时,服务器将尝试从8000开始寻找下一个可用的端口,以尽可能保持可预测性

>>> import sys
>>> import time
>>> import subprocess
>>> from six.moves import SimpleHTTPServer
>>> startup_delay = 0.5
>>> simple_popen = subprocess.Popen(
...     [sys.executable, '-m', SimpleHTTPServer.__name__]
...     ); time.sleep(1)
>>> echo_popen = subprocess.Popen(
...     [sys.executable, '-m', 'httpdecho']
...     ); time.sleep(1)
>>> echo_popen.poll()
>>> simple_popen.kill()

一旦启动,HTTP请求将在响应中进行回显。默认响应体格式基本上是HTTP头格式,来自 http.client.HTTPMessage

>>> import io
>>> import requests
>>> import email
>>> get_response = requests.delete('https://127.0.0.1:8001')
>>> get_body = email.message_from_string(get_response.text)
>>> print(get_body['Method'])
DELETE
>>> print(get_body['Path'])
/
>>> print(get_body.get_payload())
<BLANKLINE>

查询参数也包含在内

>>> query_response = requests.get(
...     'https://127.0.0.1:8001', params=dict(Foo='foo'))
>>> query_body = email.message_from_string(query_response.text)
>>> print(query_body['Foo'])
foo

如果请求是 POST 或其他接受请求体的方法,则请求体或响应体的内容将包含POST体

>>> post_response = requests.patch(
...     'https://127.0.0.1:8001', data=dict(Bar='bar'))
>>> post_body = email.message_from_string(post_response.text)
>>> print(post_body.get_payload())
Bar=bar

关闭服务器

>>> echo_popen.kill()

待办事项

未来版本的功能

Content-TypeAccept 的内容协商支持

如果提供,以 Accept 头中指定的格式返回响应体,否则以请求相同的 Content-Type 返回。

由以下支持