1、前言

  今天需要实现一个Pyhton的http服务,与Web的JS进行交换。

2、实例代码

  支持HEAD、GET、POST方法,将参数转换为JSON格式,返回结果以JSON字符串返回。

import time
import BaseHTTPServer
import urllib
import json
import base64 HOST_NAME = '127.0.0.1'
PORT_NUMBER = 8080
CONIFRM_PATH = '/tmp' class HttpHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers() def _json_encode(self, data):
array = data.split('&')
json_data = {}
for item in array:
item = item.split('=', 1)
json_data[item[0]] = item[1]
return json_data def _get_handler(self, data):
json_data = self._json_encode(data) def _post_handler(self, data):
retVal = {}
json_data = self._json_encode(data)
file_name = json_data['FileName']
file_data = base64.b64decode(json_data['FileData'])
file_path = "%s/%s"% (CONIFRM_PATH, file_name)
fd = open(file_path, 'w')
fd.write(file_data)
fd.close()
retVal["RetCode"] = 0
return json.dumps(retVal) def do_HEAD(self):
self._set_headers() def do_GET(self):
self._set_headers()
#get request params
path = self.path
query = urllib.splitquery(path)
self._get_handler(query[1]); def do_POST(self):
self._set_headers()
#get post data
post_data = self.rfile.read(int(self.headers['content-length']))
post_data = urllib.unquote(post_data).decode("utf-8", 'ignore')
retStr = self._post_handler(post_data)
self.wfile.write(retStr) if __name__ == '__main__':
server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), HttpHandler)
print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

使用NodeJS默认测试如下:

var request = require('request');
// Set the headers
var headers = {
'User-Agent': 'USSL Agent/0.0.1',
'Content-Type': 'application/x-www-form-urlencoded'
} // Configure the request
var options = {
url: 'http://127.0.0.1:8080/',
method: 'GET',
headers: headers,
qs: {'Method':'Put','FileName': 'test.doc'}
} // Start the request
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
}) var options = {
url: 'http://127.0.0.1:8080/',
method: 'POST',
headers: headers,
form: {'FileName': 'test-confirm.txt', 'FileData': "dGhpcyBpcyBhIGV4YW1wbGU="}
} request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
})

Python的HTTP服务实例的更多相关文章

  1. redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐

    redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐 1.Redis 官方网站下载: http://redis.io/dow ...

  2. Python回调函数用法实例

    Python回调函数用法实例 作者:no.body链接:https://www.zhihu.com/question/19801131/answer/27459821 什么是回调函数? 我们绕点远路来 ...

  3. 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍  <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制 一.综述 SuperIO(SIO)定位 ...

  4. 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载

    注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架Server ...

  5. [WCF编程]8.服务实例的生命周期

    一.服务实例的生命周期概览 我们已经直到,通过显式调用Close方法或等待默认的超时时间到来,都可以释放服务实例.但是,在会话连接里,经常需要按一定顺序调用方法. 二.分步操作 会话契约的操作有时隐含 ...

  6. Python 监控nginx服务是否正常

    Python 监控nginx服务是否正常 #!/usr/bin/env python import os, sys, time from time import strftime while True ...

  7. Windows Azure虚拟机和云服务实例计费方式更新

    在之前的Windows Azure计费账单中,A0,A1,A2,A3,A4系列的虚拟机(云服务实例)都是以A1为基准计费单位的,即: 虚拟机大小 计费单位(小时) A0 A1*0.25 A1 A1*1 ...

  8. python基础——类和实例

    python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...

  9. WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发

    .Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Se ...

随机推荐

  1. [最短路]P1462 通往奥格瑞玛的道路

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  2. RecyclerView 加点击事件

    在apapter里去实现. View.OnClickListener onClickListener = new View.OnClickListener() { @Override public v ...

  3. 正确释放Vector的内存

    http://blog.jobbole.com/37700/ 今天在看微博的时候, 有人提出了一个对于Vector内存泄露的疑问( Link). 博主采用 Vector存储一些数据,但是发现在执行 c ...

  4. JAVA基础3——常见关键字解读(1)

    常见的JAVA中的关键字 static static静态变量 静态变量:使用static关键字定义的变量.static可以修饰变量和方法,也有static静态代码块.被static修饰的成员变量和成员 ...

  5. 微服务配置内容《网上copy》=========》如何创建一个高可用的服务注册中心

    前言:首先要知道什么是一个高可用的服务注册中心,基于spring boot建成的服务注册中心是一个单节点的服务注册中心,这样一旦发生了故障,那么整个服务就会瘫痪,所以我们需要一个高可用的服务注册中心, ...

  6. Caddy服务器搭建和实现文件共享

    1:Caddy介绍 作为新兴 Web 服务器,Caddy 提供了很多简单易用的功能而没有历史的包袱,其默认支持并且能帮你自动配置 HTTP/2.HTTPS,对于 IPV6.WebSockets 都有很 ...

  7. javascript的BOM,DOM对象

    BOM对象 window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个window对象.功能上讲: 控制浏览器窗口的.使用上讲: window对象不需要创建对象,直接使 ...

  8. http高可用+负载均衡 corosync + pacemaker + pcs

    http高可用+负载均衡 corosync + pacemaker + pcsopenstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861. ...

  9. Swagger服务API治理详解

    swager2的简介 在App后端开发中经常需要对移动客户端(Android.iOS)提供RESTful API接口,在后期版本快速迭代的过程中,修改接口实现的时候都必须同步修改接口文档,而文档与代码 ...

  10. H5混合开发二维码扫描以及调用本地摄像头

    今天主管给了我个需求,说要用混合开发,用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的,其中还弄了个闪光灯.但是纯H5的没接触过,心里没底 ...