`
phyeas
  • 浏览: 164204 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

在Python3.0中使用HTTPServer处理web请求2-获取请求参数

阅读更多

继上次用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类似

分享到:
评论

相关推荐

    一款Python基于VUE3.0的高颜值卡密发卡系统源码.zip

    在这个系统中,Python可能使用了如Flask或Django这样的Web框架,负责处理HTTP请求,数据库操作,以及与Vue.js前端进行数据交互。 Vue.js 3.0是这个系统前端的核心,它提供了组件化开发模式,使得开发者可以将UI拆分...

    Ubuntu系统Daphne + Nginx部署Python Django项目精讲【含代码说明】

    在本教程中,我们将深入探讨如何在Ubuntu系统上使用Daphne和Nginx部署Python Django项目,同时利用Supervisor进行进程管理。首先,Django 3.0开始支持ASGI(Asynchronous Server Gateway Interface)应用程序,使得...

    3.0 XML-RPC 官方示例+源码+官网地址资料.rar

    - 在3.0版本中,XML-RPC库通常提供客户端和服务器端的API,方便开发者创建和处理XML-RPC请求。例如,在Python中,有`xmlrpc.client`(客户端)和`xmlrpc.server`(服务器端)模块。 - 服务器端需要定义可以被远程...

    BI大屏3.0和4.0和5.0代码.zip

    - 在 BI 大屏项目中,Koa 服务器通常用于处理 HTTP 请求,对接后端数据源,如数据库或API接口,为前端提供数据服务。开发者可能会用到 Koa 中间件来处理路由、认证、错误处理等任务。 - Koa 的可扩展性很强,可以...

    Go Web 编程

    《GoWeb编程》采用了CC BY-SA 3.0许可证,意味着其他人可以在遵守相应条件的情况下自由地使用和修改内容,代码则遵循 BSD 3-Clause 许可证。 ### 结语 《GoWeb编程》不仅是一本关于Go语言Web开发的书籍,更是一个...

    Web开发技术习题集样本.doc

    - Web3.0,也被称为语义Web,强调机器理解和处理信息,物联网、大数据和云计算是其特征。 - Web4.0则进一步扩展了智能互联,如人工智能和增强现实等技术的应用。 4. **Web服务(Web Service)**: - Web服务允许...

    H3C CAS REST API接口

    对于POST和PUT请求,通常在请求体中传递JSON格式的数据来指定操作参数。 H3C CAS REST API接口提供了多种功能,例如: 1. 虚拟机管理:创建、查询、启动、停止、重启和销毁虚拟机。 2. 网络资源管理:创建、修改和...

    uof资料统计学习笔记

    在IT行业中,尤其是在Web开发领域,理解和掌握"UOF资料统计学习笔记"中的知识点是至关重要的。UOF可能指的是某个特定的技术或者框架,但由于信息有限,这里我们将基于Web开发的相关内容进行深入探讨。 首先,我们要...

    基于Selenium自动化测试框架的数据驱动技术研究及应用.pdf

    在Selenium 3.0中,WebDriver被引入取代了Selenium RC,其Client与Server之间通过HTTP请求进行通信。 pandas是一个开源的Python库,专注于数据分析。它提供了高效的数据结构和数据分析工具,特别适合进行数据的读写...

    xml的几种方式的操作集锦大全

    XML请求和响应包含在HTTP报文中,使得不同系统间的通信变得标准化和可理解。 总结,XML操作涵盖了从解析、创建到查询、验证的多个方面。掌握这些技术,可以帮助我们更好地处理XML数据,实现数据的有效管理和传输。...

    tomcat百度地图下载器

    在Linux环境下,你可能需要使用curl或wget命令来发送HTTP请求,或者使用编程语言(如Java、Python、JavaScript等)编写代码来实现地图下载功能。如果你使用Java,可以利用HttpURLConnection或者Apache HttpClient库...

    2021-2022计算机二级等级考试试题及答案No.15399.docx

    12. ASP.NET的六个内置对象包括Response(响应)、Request(请求)、Server(服务器)、Application(应用程序)、Session(会话)和Cookie,用于处理HTTP请求和响应。 13. Python代码`ss = list(set("jzzszyj"))`将...

    详解Django3中直接添加Websockets方式

    你可以定义一个装饰器来识别WebSocket请求,并在视图中使用`await`关键字处理异步操作。 同时,别忘了在urls.py中配置WebSocket的URL,这样Django就能正确地路由WebSocket请求。通常,你会使用一个特定的路径前缀,...

    Intergalactic-Post

    这通常意味着你需要一定的开发环境设置,比如在你的计算机上安装Python 3.0或更高版本。"RunLocalServer.py"脚本是关键,这是一个Python脚本,它的作用可能是启动一个本地HTTP服务器,使得你可以通过浏览器访问和...

    flask-apps:我可以在其中存储烧瓶应用程序的巨大文件夹

    烧瓶应用 我可以在其中存储烧瓶模板应用程序的巨大文件夹。 概述 ... 是Flask之上的框架,可自动处理使用OpenAPI(以前称为Swagger)定义的HTTP请求,同时支持该规范的v2.0和v3.0。 是一个ORM / OD

    iss安装文件包

    9. **Web部署工具**:微软的Web Deploy(以前称为Web Deploy 3.0)是一款用于发布和更新IIS网站的工具,它可以自动化处理文件同步、数据库迁移等复杂任务。 10. **最新版本**:IIS随Windows Server版本更新而发展,...

    Apache Tomcat v9.0.4

    它能够处理大量并发请求,确保Web应用在高流量环境下依然能正常运行。这得益于其优秀的线程管理和内存管理策略。 4. **API扩展**:Tomcat 支持通过简单的API进行扩展,允许开发者自定义服务器的行为,例如添加新的...

Global site tag (gtag.js) - Google Analytics