Python:运行 SimpleHTTPServer 并在脚本中向它发出请求

标签 python python-2.7 server simplehttpserver

我想编写 Python 脚本:

  1. 在某个端口上启动 SimpleHTTPServer
  2. 向服务器发出请求并通过 POST 发送一些数据
  3. 以交互模式通过 shell 运行脚本并与之交互

现在的代码是这样的:

import SimpleHTTPServer
import SocketServer
import urllib
import urllib2

# Variables
URL = 'localhost:8000'
PORT = 8000

# Setup simple sever
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()

# Getting HTML from the target page
values = {
    'name': 'Thomas Anderson',
    'location': 'unknown'
}
data = urlilib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
html = response.read()

问题是一旦我运行我的脚本

python -i foo.py

它打印 serving at port 8000 然后卡住。我敢打赌这对于这里的 Python 专家来说是微不足道的,但我们将不胜感激。

最佳答案

将服务器作为不同的进程运行,这样您就可以运行脚本的其余部分。

我也宁愿使用 requests比 urllib。

import SocketServer
import SimpleHTTPServer

import requests
import multiprocessing

# Variables
PORT = 8000
URL = 'localhost:{port}'.format(port=PORT)

# Setup simple sever
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "Serving at port", PORT

# start the server as a separate process
server_process = multiprocessing.Process(target=httpd.serve_forever)
server_process.daemon = True
server_process.start()

# Getting HTML from the target page
values = {
    'name': 'Thomas Anderson',
    'location': 'unknown'
}

r = requests.post(URL, data=values)
r.text

# stop the server
server_process.terminate()

关于Python:运行 SimpleHTTPServer 并在脚本中向它发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34932268/

相关文章:

python - 在paramiko中正确使用banner_timeout

python - MultiValueDictKeyError : GET works, POST 没有。为什么?

python - 混淆矩阵中的白线?

python - Python 中的 Zip 列表

python - 在一个键中存储不同类型的值 - 字典

c - 我正在尝试将多个客户端连接到该服务器,但代码似乎不起作用>

python - 使用 Python 动态地在 Databricks 中的另一个笔记本中创建笔记本

python-2.7 - 在 Windows 7 64 位上安装 numpy、matplotlib

python - 有序集 Python 2.7

api - 优化多个网络请求