我在Python中编写HTTP服务器,我需要从发送的请求中获取所请求文件的名称,以便从服务器发送
Here is my code:
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
import os.path
from os import curdir, sep
PortNum = 8080
class myHandler(BaseHTTPRequestHandler):
#Handler for the GET requests
def do_GET(self):
if self.path=="/":
print os.path.splitext(self.path)[0]
print self.path
print "my code"
self.path="/index_example3.html"
try:
#Check the file extension required and
#set the right mime type
extension = os.path.splitext(self.path)[-1]
mime_types = {
'.html': 'text/html',
'.jpg':'image/jpg',
'.gif': 'image/gif',
'.js': 'application/javascript',
'.css': 'text/css',
}
mimetype = mime_types.get(extension)
sendReply = mimetype is not None
if sendReply == True:
#open the static file requested and send it
f=open(curdir+sep+self.path)
self.send_response(200)
self.send_header('Content-type',mimetype)
self.wfile.write(f.read())
f.close()
return
except IOError:
self.send_error(404,'File Not Found'% self.path)
try:
#Create a web server and define thehandler to manage the
#incoming request
server = HTTPServer(('',PortNum),myHandler)
print('Started httpserver on port ',PortNum)
#wait forever for incoming http requests
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shuting down the web server'
server.socket.close()
我使用了self.path来获取整个路径,但它只包含一个' /'字符和请求何时是" POST"请求包含' / send'在这个图书馆的文档页面HERE我不能做任何有用的事情
我想获取请求的文件名我不知道self.path真的包含什么。
答案 0 :(得分:3)
当我运行您的代码时,它看起来效果很好。
当我输入localhost:8080 / test.html时,服务器已打印
127.0.0.1 - - [28 / Nov / 2014 16:55:36]“GET / test.html HTTP / 1.1”200 -
这不是你想要的吗?
答案 1 :(得分:1)
根据Python BaseHTTPserver库的文档:
路径 包含请求路径。
这样如果客户端发送像127.1.1.1:8080
这样的内容
self.path只包含一个'/'
字符,但如果它像127.1.1.1:8080/index.html
self.path
包含'index.html'
并且没有问题
但我不知道为什么在POST请求中self.path中存在'/send'