Python利用urlib2传输一个超大的集合给Java后端

Author Avatar
andot 3月 01, 2018
  • 在其它设备中阅读本文章

我们需求中需要传输的超大集合

集合长度为:492*6条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
arr = [{
"cityName": "北京",
"temperature": 25,
"humidity": 23,
"population": 23,
"english": "beijing"
}, {
"cityName": "山东省",
"temperature": 25,
"humidity": 23,
"population": 23,
"english": "shandong"
}, {
"cityName": "上海",
"temperature": 25,
"humidity": 23,
"population": 23,
"english": "shanghai"
}, ...]

Python通过POST发送集合

集合传输只能依靠于JSON字符串传输,这里就需要非常的注意了

  1. 集合转为JSON字符串,中文按照UTF-8编码
1
2
strs = json.dumps(result, ensure_ascii=False, encoding='UTF-8')
params = urllib.urlencode({"saveList": strs})
  1. 发送POST请求,get请求不合适,也不能传输大文本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 定义一些文件头
headers = {"Content-Type": "application/x-www-form-urlencoded", "Connection": "Keep-Alive",
"Referer": 'http://127.0.0.1:8080/test'};
# 与网站构建一个连接
conn = httplib.HTTPConnection("127.0.0.1", 8080);
# 开始进行数据提交,同时也可以使用get进行
conn.request(method="POST", url="/test", body=params, headers=headers);
# 返回处理后的数据
response = conn.getresponse();
# 判断是否提交成功
if response.status == 200:
print"发布成功!^_^!";
else:
print"发布失败\^0^/";
# 关闭连接
conn.close();strs = json.dumps(result, ensure_ascii=False, encoding='UTF-8')
params = urllib.urlencode({"saveList": strs})

这样传输,既可以解决传输大量数据,也可以传输中文,java直接接受到字符串,也不需要转码,转成JSON字符串,就可以循环遍历存储数据库了

1
2
3
4
5
6
7
8
9
10
11
   @RequestMapping(value="/test", produces="text/html;charset=UTF-8")
@ResponseBody
public String getWeatherList(HttpServletRequest request){
String json = request.getParameter("saveList");
JSONArray jsonArray = JSONArray.fromObject(json);
Object[] os = jsonArray .toArray();
for(int i=0; i<os.length; i++) {
JSONObject jsonObj = JSONObject.fromObject(os[i]);
System.out.println(jsonObj.get("cityName"));
}
}

打印结果: 上海

This blog is andot org Andot Blog MIT License, 博客转载请注明出处!
本文链接:http://andot.org/2018/03/01/pythontojava/