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"}

 

posted on   明天有风吹  阅读(7977)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通

导航

+V atob('d2h5X251bGw=')

请备注:from博客园

点击右上角即可分享
微信分享提示