python3.4.3 调用http接口 解析response xml后插入数据库
工作中需要调用一个http的接口,等不及java组开发,就试着用python去调用。Python版本3.4.3
完整的流程包括:从sqlServer取待调用的合同列表 -> 循环调用http接口 -> 将response写入xml文件 -> 解析xml -> 插入oracle数据库
要去公司旅游了,先把代码放着,以后再详细解释记录一下。
#!/usr/bin/python3
import time
import pymssql
import urllib.parse
import httplib2
import os.path
import xml.etree.ElementTree
import cx_Oracle v_curr_datetime = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
print ('Step1: ' + v_curr_datetime) ##连接sqlServer,获得请求xml,写入txt文件#########################
#conn_req = pymssql.connect(host="***",user="***",password="***",database="***",charset = "utf8")
conn_req = pymssql.connect(host="***",user="",password="",database="ods",charset = "utf8")
cur_req = conn_req.cursor() v_file_name_req = 'requestList.txt'
f_req = open(v_file_name_req, 'w')
f_req = open(v_file_name_req, 'r+')
f_req.truncate() v_sql_req = "SELECT Loan_No,request_xml FROM if_haier_loan_contract_list"
cur_req.execute(v_sql_req)
rows = cur_req.fetchall()
for row_req in rows:
#row_req = row_req[0]+'||'+row_req[1]+'\n'
row_req = row_req[0] + '||' + 'kfs;serv10000100056;' + row_req[1] + '\n'
print(row_req)
f_req.write(row_req) f_req.close()
cur_req.close()
conn_req.close() print ('Step2: ' + time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))) ##循环得到的xml文件,逐个调用还款计划接口,解析后存到数据库##############
f_read = open('requestList.txt', 'r')
for v_row_read in f_read:
v_row_read = v_row_read.split('||')
print ('当前调用xml: ' + v_row_read[1])
http = httplib2.Http()
url = 'http://***' #body_str ='kfs;serv10000100056; <?xml version="1.0" encoding="gb2312" standalone="yes"?><msgbody><serviceId>serv10000100056</serviceId><GEN_GL_NO>1257393</GEN_GL_NO><LOAN_NO>HCF-CSCP20150708702904001</LOAN_NO><APP_USER_ID>01400515</APP_USER_ID><APP_USER_NAME>xxx</APP_USER_NAME><APP_USER_ORG_NO>0010</APP_USER_ORG_NO><ENQ_TYP>ALL</ENQ_TYP></msgbody>'
body_str = v_row_read[1]
headers = {'Content-type': 'application/x-www-form-urlencoded'}
print ('*'*30)
##请求接口数据#################
response, content = http.request(url, 'POST', headers=headers, body=body_str)
##将xml头的gb2312替换成utf-8###
print ('*'*20)
v_response = content.decode("utf-8").replace('encoding=\"gb2312\"','encoding=\"utf-8\"') ##将response生成xml文件#######
v_file_name = v_row_read[0] + '.xml'
f = open(v_file_name, 'w')
f.truncate()
f.write(v_response)
f.write('\n')
f.close() ##读取xml####################
root=xml.etree.ElementTree.parse(v_file_name)
##连接数据库##################
connMAPP = cx_Oracle.connect("user","password","tnsname")
cur1 = connMAPP.cursor() ##将数据写入数据库#############
#book=root.findall('MX')
book=root.iter('MX')
for book_list in book:
#print ('='*20)
v_row = []
for note in book_list:
v_temp = v_row.append(note.text)
#v_row = v_row.split(',')
#print (v_row) v_sql = " insert into temp_py values (%(v0)s,to_date(\'%(v1)s\','YYYY-MM-DD')) "%{'v0':v_row[0],'v1':v_row[1]}
#print (v_sql)
cur1.execute(v_sql) ##commit后关闭数据库连接
connMAPP.commit()
cur1.close()
connMAPP.close()
print ('Step3: ' + time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())))
python3.4.3 调用http接口 解析response xml后插入数据库的更多相关文章
- 使用XStream解析复杂XML并插入数据库(二)
标注黄色地方:我需要加深学习!!! 我写的是webservice,目前具体写webservice的步骤我还不清楚, 整理完小知识开始整理webservice! 针对以下格式的XML进行解析 <? ...
- 使用XStream解析复杂XML并插入数据库(一)
环境: Springboot+mysql 我只想说jpa真的超级好用,准备深入研究一下~ 导入依赖: <dependency> <groupId>org.projectlomb ...
- 分30条依次解析xml并插入数据库成功
package xxx; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import or ...
- 利用python3 调用zabbix接口完成批量加聚合图形(screens)
在上一篇博客中,我们完成的利用python3 调用zabbix接口批量增加主机,增加主机的item,增加主机的图形! 接下来我们完成批量增加主机的screen 首先我们要增加screen需要哪些参数呢 ...
- 征信接口调用,解析(xml)
数据传输格式报文格式:xml public CisReportRoot queryCisReport(PyQueryBean pyQueryBean) throws Exception { CisRe ...
- python使用grpc调用rpc接口
proto文件: syntax = "proto3"; package coupon; // //message UnsetUseC2URequest { // int64 bid ...
- Java调用第三方接口工具类(json、form)
1.JSON值访问 /** * 调用对方接口方法 * @param path 对方或第三方提供的路径 * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析 ...
- python调用RPC接口
要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: https://grpc.io/docs/tutorials/basic/python.html 需要安 ...
- Java调用第三方接口示范
在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程[1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的res ...
随机推荐
- Jenkins+jmeter设置定时执行任务
1.准备好你的jmeter脚本 2.测试命令行下脚本执行 1)cd进入脚本目录 2)dir命令查看该目录下的脚本文件 3)jmeter -n -t test.jmx -l result.jtl 命令 ...
- linux上hosts文件如何配置
linux上hosts文件如何配置 一.什么是host Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登 ...
- 《Java 面试问题 一 Spring 、SpringMVC 、Mybatis》
自己理解SSM框架可能问到的面试问题 一.需要知道的SSM基础知识 1.什么是Spring? Spring 是一款轻量级的 IOC (依赖反转) 和 APO (面向切面) 容器框架.(个人理解: 就 ...
- Data Binding on Android
Data Binbing框架是在2015年Google I/O大会上最早提出来的,一直在Android开发者中热议,但是很少有真正在项目中用到.本文简单介绍Data Binding框架的简单用法以及其 ...
- 图的DFS。。类似树的DFS
Depth-First Search (DFS) Depth-first search (DFS) is an algorithm for traversing or searching tree o ...
- Python之路购物车
#coding:utf-8 wages=raw_input('what are your wages:') lise_commodity=[('apples',50),('orange',55),(' ...
- js中判断为false的情况
document.write((new Boolean())+"<br />"); document.write((new Boolean(" ...
- Myeclipse 错误An internal error has occurred 解决办法
1. 给MyEclipse的快捷方式加个参数再重新启动一次. 步骤如下:右键选中快捷方式属性选项,在快捷方式页,目标一项最后加上-clean选项,如"C:\MyEclipse6\e ...
- DEBUG -- CLOSE BY CLIENT STACK TRACE问题的两种解决方案,整理自网络
1.DEBUG -- CLOSE BY CLIENT STACK TRACE 最近用c3p0遇到各种奇怪的问题,也不知道是它不行还是我不行. 今天又遇到了一个"DEBUG -- CLOSE ...
- Android studio常用快捷键与设置
1.格式化代码: 命令 快捷键 将代码合并成一行 Ctrl + Shift + J 格式化 Ctrl+Alt+L 2.API函数参数提示:双击选中所要提示的函数,再按F2即可显示函数的使用方法. 3. ...