继上次用HTTPServer写了一个简单的HTTPHandler后,我发现如果采用HTTPServer处理WEB请求的话系统没有提供获得请求参数的方法(如Java里的request.getParameter),这哪成,不能获取参数还跟用户交互个屁啊。于是又一头扎进了一望无垠的类库中。下面就是今天早上看来一个多小时的结果。
除上次说用到的那几个之外,这次新加了一个urllib
核心代码:
urllib.parse.parse_qs(urllib.parse.unquote(s))
urllib.parse.unquote 将被quote的字符串解码,即常规的url编码解码操作
urllib.parse.parse_qs 将字符串解释为dict
这里解释下为什么说是字符串转为dict:从客户端过来的参数,无论是GET还是POST过来的,其值都是一个字符串,"a=1&b=2",
如果是POST那么字符串最后还有一个\n或者\r\n,所以这个方法是GET,POST通用的
那么,先上代码吧:
#!coding=UTF-8
from http.server import HTTPServer,BaseHTTPRequestHandler
import io,shutil,urllib
class MyHttpHandler(BaseHTTPRequestHandler):
def do_GET(self):
name="World"
if '?' in self.path:#如果带有参数
self.queryString=urllib.parse.unquote(self.path.split('?',1)[1])
#name=str(bytes(params['name'][0],'GBK'),'utf-8')
params=urllib.parse.parse_qs(self.queryString)
print(params)
name=params["name"][0] if "name" in params else None
r_str="Hello "+name+" <form action='' method='POSt'>Name:<input name='name' /><br /><input type='submit' value='submit' /></form>"
enc="UTF-8"
encoded = ''.join(r_str).encode(enc)
f = io.BytesIO()
f.write(encoded)
f.seek(0)
self.send_response(200)
self.send_header("Content-type", "text/html; charset=%s" % enc)
self.send_header("Content-Length", str(len(encoded)))
self.end_headers()
shutil.copyfileobj(f,self.wfile)
def do_POST(self):
s=str(self.rfile.readline(),'UTF-8')#先解码
print(urllib.parse.parse_qs(urllib.parse.unquote(s)))#解释参数
self.send_response(301)#URL跳转
self.send_header("Location", "/?"+s)
self.end_headers()
httpd=HTTPServer(('',8080),MyHttpHandler)
print("Server started on 127.0.0.1,port 8080.....")
httpd.serve_forever()
其实这个程序没做什么特殊操作,就是把原来的Hello World改了一下,让客户先输入姓名再显示Hello xxx...
获取参数,最重要的是解码操作,do_GET是最郁闷的,如果客户直接在地址栏输入 xxx/?name=某人 则此时的编码比较麻烦,必须使用 name=str(bytes(params["name"][0],'iso-8859-1'),'GBK'),当然了,这是针对我的IE7是这样,其他浏览器我还没进行测试。
这里使用了params["name"][0],parse_sq将每个参数看做是一个数组,就算你只传了一个过来,也会被认为是数组,与java的request.getParametersMap类似
分享到:
- 2009-03-27 14:21
- 浏览 6506
- 评论(0)
- 论坛回复 / 浏览 (0 / 4753)
- 查看更多
相关推荐
在这个系统中,Python可能使用了如Flask或Django这样的Web框架,负责处理HTTP请求,数据库操作,以及与Vue.js前端进行数据交互。 Vue.js 3.0是这个系统前端的核心,它提供了组件化开发模式,使得开发者可以将UI拆分...
在本教程中,我们将深入探讨如何在Ubuntu系统上使用Daphne和Nginx部署Python Django项目,同时利用Supervisor进行进程管理。首先,Django 3.0开始支持ASGI(Asynchronous Server Gateway Interface)应用程序,使得...
- 在3.0版本中,XML-RPC库通常提供客户端和服务器端的API,方便开发者创建和处理XML-RPC请求。例如,在Python中,有`xmlrpc.client`(客户端)和`xmlrpc.server`(服务器端)模块。 - 服务器端需要定义可以被远程...
- 在 BI 大屏项目中,Koa 服务器通常用于处理 HTTP 请求,对接后端数据源,如数据库或API接口,为前端提供数据服务。开发者可能会用到 Koa 中间件来处理路由、认证、错误处理等任务。 - Koa 的可扩展性很强,可以...
《GoWeb编程》采用了CC BY-SA 3.0许可证,意味着其他人可以在遵守相应条件的情况下自由地使用和修改内容,代码则遵循 BSD 3-Clause 许可证。 ### 结语 《GoWeb编程》不仅是一本关于Go语言Web开发的书籍,更是一个...
- Web3.0,也被称为语义Web,强调机器理解和处理信息,物联网、大数据和云计算是其特征。 - Web4.0则进一步扩展了智能互联,如人工智能和增强现实等技术的应用。 4. **Web服务(Web Service)**: - Web服务允许...
对于POST和PUT请求,通常在请求体中传递JSON格式的数据来指定操作参数。 H3C CAS REST API接口提供了多种功能,例如: 1. 虚拟机管理:创建、查询、启动、停止、重启和销毁虚拟机。 2. 网络资源管理:创建、修改和...
在IT行业中,尤其是在Web开发领域,理解和掌握"UOF资料统计学习笔记"中的知识点是至关重要的。UOF可能指的是某个特定的技术或者框架,但由于信息有限,这里我们将基于Web开发的相关内容进行深入探讨。 首先,我们要...
在Selenium 3.0中,WebDriver被引入取代了Selenium RC,其Client与Server之间通过HTTP请求进行通信。 pandas是一个开源的Python库,专注于数据分析。它提供了高效的数据结构和数据分析工具,特别适合进行数据的读写...
XML请求和响应包含在HTTP报文中,使得不同系统间的通信变得标准化和可理解。 总结,XML操作涵盖了从解析、创建到查询、验证的多个方面。掌握这些技术,可以帮助我们更好地处理XML数据,实现数据的有效管理和传输。...
在Linux环境下,你可能需要使用curl或wget命令来发送HTTP请求,或者使用编程语言(如Java、Python、JavaScript等)编写代码来实现地图下载功能。如果你使用Java,可以利用HttpURLConnection或者Apache HttpClient库...
12. ASP.NET的六个内置对象包括Response(响应)、Request(请求)、Server(服务器)、Application(应用程序)、Session(会话)和Cookie,用于处理HTTP请求和响应。 13. Python代码`ss = list(set("jzzszyj"))`将...
你可以定义一个装饰器来识别WebSocket请求,并在视图中使用`await`关键字处理异步操作。 同时,别忘了在urls.py中配置WebSocket的URL,这样Django就能正确地路由WebSocket请求。通常,你会使用一个特定的路径前缀,...
这通常意味着你需要一定的开发环境设置,比如在你的计算机上安装Python 3.0或更高版本。"RunLocalServer.py"脚本是关键,这是一个Python脚本,它的作用可能是启动一个本地HTTP服务器,使得你可以通过浏览器访问和...
烧瓶应用 我可以在其中存储烧瓶模板应用程序的巨大文件夹。 概述 ... 是Flask之上的框架,可自动处理使用OpenAPI(以前称为Swagger)定义的HTTP请求,同时支持该规范的v2.0和v3.0。 是一个ORM / OD
9. **Web部署工具**:微软的Web Deploy(以前称为Web Deploy 3.0)是一款用于发布和更新IIS网站的工具,它可以自动化处理文件同步、数据库迁移等复杂任务。 10. **最新版本**:IIS随Windows Server版本更新而发展,...
它能够处理大量并发请求,确保Web应用在高流量环境下依然能正常运行。这得益于其优秀的线程管理和内存管理策略。 4. **API扩展**:Tomcat 支持通过简单的API进行扩展,允许开发者自定义服务器的行为,例如添加新的...