https用起来和http差不多,底层的已经被写好,不需要我们去处理。
https服务端(使用最简单的tornado说明)
import tornado.httpserver
import tornado.ioloop
import tornado.web
class getToken(tornado.web.RequestHandler):
def get(self):
self.write("hello")
application = tornado.web.Application([
(r'/', getToken),
])
if __name__ == '__main__':
http_server = tornado.httpserver.HTTPServer(application, ssl_options={
"certfile": "server.crt",
"keyfile": "server.key",
}) #https服务器
#http_server = tornado.httpserver.HTTPServer(application) #http服务器用这个
http_server.listen(443)
tornado.ioloop.IOLoop.instance().start()
可以看到,https在配置上就多了一个ssl_options,这里配置的是ssl证书,由于我是内部机器通信用的,就自己生成了。具体方法如下
http://www.2cto.com/article/201510/444706.html
https客户端
https分为单向和双向,这里我用的是单向,各种请求和http完全一致,把http改为https即可
对于https://localhost:443/test?data1={"key1":"dsf"}&data2=test2
get
def getHtml():
requrl = """http://localhost:443/test?data1={"key1":"dsf"}&data2=test2"""
resp = urllib2.urlopen(requrl)
rst = resp.read()
resp.close()
print rst
return rst
getHtml()
post
url = "http://localhost:443/test"
data1 = {"key1":"dsf"}
data2 = "test2"
def postHttp():
#定义要提交的数据
params = {"data1": json.dumps(data1), "data2": data2}
#url编码
postdata=urllib.urlencode(params)
#enable cookie
request = urllib2.Request(url, postdata)
response=urllib2.urlopen(request)
rst = response.read()
print rst
postHttp()
服务端代码
#coding:utf8
import tornado.httpserver
import tornado.ioloop
import tornado.web
import json
class getToken(tornado.web.RequestHandler):
def get(self):
self.write("hello")
class testHandler(tornado.web.RequestHandler):
def get(self):
data1 = self.get_argument("data1") # 如果没有给默认值 ,会自动返回400错误
print 1111111,data1
if not data1:
self.set_status(400)
return
data2 = self.get_argument("data2") # 如果没有给默认值 ,会自动返回400错误
print 2222222,data2
if not data2:
self.set_status(400)
return
j_params = json.loads(data1)
print j_params
self.write("welcome to %s"%"get")
def post(self):
data1 = self.get_argument("data1") # 如果没有给默认值 ,会自动返回400错误
print 1111111, data1
if not data1:
self.set_status(400)
return
data2 = self.get_argument("data2") # 如果没有给默认值 ,会自动返回400错误
print 2222222, data2
if not data2:
self.set_status(400)
return
j_params = json.loads(data1)
print j_params
self.write("welcome to %s"%"post")
if __name__ == '__main__':
app = tornado.web.Application([
(r'/', getToken),
(r'/test', testHandler),
])
http_server = tornado.httpserver.HTTPServer(app) #http服务器用这个
http_server.listen(443)
tornado.ioloop.IOLoop.instance().start()