python http post json

直接上代码吧

## python3

 1 #!/usr/bin/env python3
 2 # -*- coding: utf-8 -*-
 3 
 4 import json, gzip
 5 from urllib import request, parse
 6 
 7 def REQ(url, params=None, headers=None):
 8     headers = headers or {}
 9     if params: # dict
10         params = json.dumps(params) if headers['Content-Type'] and 'application/json' in headers['Content-Type'] else parse.urlencode(params)
11         params = params.encode('utf-8')
12 
13     # 当 params 不为空,method 为 POST
14     req = request.Request(url, params, headers)
15     with request.urlopen(req, timeout=60) as page:
16         res = page.read()
17 
18         if page.getheader('Content-Encoding') == 'gzip':
19             res = gzip.decompress(res).decode('utf-8')
20         else:
21             res = res.decode('utf-8')
22 
23         if 'application/json' in page.getheader('Content-Type'):
24             res = json.loads(res)
25 
26         return res
27 
28 url = 'http://localhost/xxx'
29 d = {'a': 'aa', 'b': 'bb'}
30 headers = { 'Content-Type': 'application/json; charset=utf-8' }
31 
32 res = REQ(url, d, headers)
33 print(res)

##python2:  

 1 #coding=utf-8
 2 import os
 3 import urllib
 4 import urllib2
 5 import re
 6 import cookielib
 7 import json
 8 
 9 
10 headers = {}
11 headers['Content-Type'] = 'application/json; charset=utf-8'
12 
13 values = {}
14 values["uuid"] = 'XXXXX'
15 values['uid'] = '86945'
16 port = '3002'
17 
18 route = 'login'
19 
20 
21 post_data = urllib.urlencode(values)
22 j_data = json.dumps(values)
23 print j_data
24 
25 def jsonPost(url):
26     req = urllib2.Request(url, j_data, headers)
27     page = urllib2.urlopen(req)
28     res = page.read()
29     page.close()
30     return res
31 
32 
33 res = jsonPost("http://127.0.0.1:%s/%s" % (port, route))
34 print res

dic = {'a': 'aa', 'b': 'bb'}

urllib.urlencode(dic)  // dictionary 转成 url 中的参数: a=aa&b=bb

json.dumps(dic)  // dictionary 转成 json: {"a":"aa", "b":"bb"}

+V d2h5X251bGw= 请备注:from博客园
原文地址:https://www.cnblogs.com/hangj/p/4720628.html