我用Python编写了一个简单的HTTP客户端和服务器进行实验.下面的第一个代码片段显示了我如何使用名为imsi的参数发送HTTP GET请求.在第二个代码片段中,我在服务器端显示了我的do_Get函数实现.我的问题是如何在服务器代码中提取imsi参数并将响应发送回客户端,以便向客户端发出imsi有效的信号.
谢谢.
PS:我验证了客户端成功发送请求.
CLIENT代码段
params = urllib.urlencode({'imsi': str(imsi)})
conn = httplib.HTTPConnection(host + ':' + str(port))
#conn.set_debuglevel(1)
conn.request("GET", "/index.htm", 'imsi=' + str(imsi))
r = conn.getresponse()
Run Code Online (Sandbox Code Playgroud)
SERVER代码段
import sys, string, cStringIO, cgi, time, datetime
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
# I want to extract the imsi parameter here and send a success response to
# back to the client.
def do_GET(self):
try:
if self.path.endswith(".html"):
#self.path has /index.htm
f = open(curdir + sep + self.path) …Run Code Online (Sandbox Code Playgroud) 我在创建一个非常简单的Python HTTP服务器时遇到了一些性能问题.关键问题是性能取决于我用来访问它的客户端,服务器和所有客户端在本地计算机上运行的位置.例如,从Python脚本(urllib2.urlopen(' http:// localhost / ').read())发出的GET请求只需要一秒钟就可以完成,考虑到服务器处于空载状态,这似乎很慢.使用MSXML2.ServerXMLHTTP从Excel运行GET请求也感觉很慢.但是,请求数据谷歌Chrome或来自RCurl的卷曲加载项RCurl会产生基本上即时的响应,这正是我所期望的.
更让我感到困惑的是,当我在工作时使用计算机时,我没有遇到任何客户端的性能问题(性能问题出在我的家用计算机上).两个系统都运行Python 2.6,尽管工作计算机运行Windows XP而不是7.
下面是我非常简单的服务器示例,它只是为任何get请求返回'Hello world'.
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
print("Just received a GET request")
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write('Hello world')
return
def log_request(self, code=None, size=None):
print('Request')
def log_message(self, format, *args):
print('Message')
if __name__ == "__main__":
try:
server = HTTPServer(('localhost', 80), MyHandler)
print('Started http server')
server.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down server')
server.socket.close()
Run Code Online (Sandbox Code Playgroud)
请注意,在MyHandler中,我重写了log_request()和log_message()函数.原因是我读到由这些功能之一执行的完全限定的域名查找可能是服务器速度慢的原因.不幸的是,将它们设置为仅打印静态消息并不能解决我的问题.
另外,请注意我已将print()语句作为MyHandler中do_GET()例程的第一行.在打印此消息之前发生缓慢,这意味着在它之后没有任何东西导致延迟.