#!/usr/bin/python3
# -*- coding: utf-8 -*-
#因为是公开提问,地址及用户名,密码有改动
import json
import pymysql
import requests
import threading
from flask import Flask, request
from mysql_tool import MysqlOper
app = Flask(__name__)
app.secret_key = 'zreq_sc_test'
db_lock = threading.Lock()
conn = pymysql.connect(
user = 'wen307',
passwd = 'JIEx120',
db = 'dydata',
host = 'rm-bp19j36e0553cu6kyo.mysql.rds.aliyuncs.com',
port = 3306,
charset = 'utf8',
autocommit = True # 自动提交确认
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 生成游标对象
print("zheli",conn.ping(reconnect=True) )
# 原始用户名 原始密码 原始id
src_num = '1'
src_pwd = 'jie110120'
src_cid = 'dy06'
src_pid = '20044'
src_url = 'http://315.716.188.244:8081/api/consumer/getPhones?pid={}&cid={}&num={}&password={}' \
.format(src_pid, src_cid, src_num, src_pwd)
@app.route('/login', methods=["GET"])
def login():
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 生成游标对象
result = {'code': 1, 'message': ''}
user = request.args.get('user')
pwd = request.args.get('pwd')
if not all([user,pwd]):
result['message'] = '参数不完整'
else:
sql = "select yue from dydata where user='{}' and pwd='{}'" \
.format(user, pwd)
conn.ping(reconnect=True)
res = cursor.execute(sql)
if res:
print(cursor.description)
yue=cursor.fetchmany(1)
#result['message'] = yue
result = {'code': 0, 'message': yue}
else:
result['message'] = '用户名密码错误或余额不足'
return json.dumps(result).encode('utf-8').decode('unicode_escape')
@app.route('/getphonea', methods=["GET"])
def getphone():
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 生成游标对象
result = {'code': 1, 'message': ''}
user = request.args.get('user')
pwd = request.args.get('pwd')
if not all([user,pwd]):
result['message'] = '参数不完整'
else:
sql = "select yue from dydata where user='{}' and pwd='{}' and yue>3" \
.format(user, pwd)
#conn.ping(reconnect=True)
with db_lock:
res = cursor.execute(sql)
if res:
reponse = requests.get(src_url) # 访问原始API
while reponse.status_code!=200:
reponse = requests.get(src_url)
result = json.loads(reponse.text) # 解析返回json
code = result.get('code') # 获取code值
if code == '1006':
result = {'code': 2, 'msg': 'Please wait a moment'}
if code == '0000':#要改
sql = "update dydata set quhaoshu=quhaoshu+1 where user = '{}'" \
.format(user)
conn.ping(reconnect=True)
with db_lock:
restwo = cursor.execute(sql) # 被影响的行数
result['code'] = '0'
else:
result['message'] = '用户名密码错误或余额不足'
return json.dumps(result).encode('utf-8').decode('unicode_escape')
# 取code部分
@app.route('/getcodea',methods=["GET"])
def getcode():
resultcode = {'code': 1, 'message': ''}
user = request.args.get('user')
pwd = request.args.get('pwd')
phone = request.args.get('phone')
if not all([user,pwd,phone]):
resultcode['message'] = '参数不完整'
else:
sql = "select yue from dydata where user='{}' and pwd='{}' and yue>3" \
.format(user, pwd)
conn.ping(reconnect=True)
with db_lock:
res = cursor.execute(sql)
if res:
src_codeurl = 'http://315.716.188.244:8081/api/consumer/getC?pid={}&cid={}&tel={}&password={}' \
.format('20044', 'dy06', phone, 'jie110120')
src_succurl = 'http://315.716.188.244:8081/api/consumer/registerNotify?pid={}&cid={}&tel={}&status=1&remark=&password={}' \
.format('20044', 'dy06', phone, 'jie110120')
reponse = requests.get(src_codeurl)
while reponse.status_code != 200:# 访问原始API取码超时判断
reponse = requests.get(src_codeurl)
resultcode = json.loads(reponse.text) # 解析返回json
succode = resultcode.get('code') # 获取code值
if succode == "0000":
sql = "update dydata set yue=yue-1 where user = '{}'" \
.format(user)
conn.ping(reconnect=True)
with db_lock:
restwo = cursor.execute(sql) # 被影响的行数
if not restwo: #这里缩进有疑点
conn2 = pymysql.connect(
user='wen307',
passwd='JIEx120',
db='dydata',
host='rm-bp19j36e0553cu6kyo.mysql.rds.aliyuncs.com',
port=3306,
charset='utf8',
autocommit=True # 自动提交确认
)
cursor2 = conn2.cursor(cursor=pymysql.cursors.DictCursor) # 生成游标对象
sql = "update dydata set yue=yue-1 where user = '{}'" \
.format(user)
with db_lock:
restwo = cursor2.execute(sql) # 被影响的行数
fankuireponse=requests.get(src_succurl)
while fankuireponse.status_code != 200: # 访问原始API,判断是否超时
fankuireponse = requests.get(src_succurl)
fankuiresultcode = json.loads(fankuireponse.text) # 解析返回json
fankuisuccode = fankuiresultcode.get('code') # 获取code值
while fankuisuccode != '0000':
requests.get(src_succurl)
fankuiresultcode = json.loads(reponse.text) # 解析返回json
fankuisuccode = fankuiresultcode.get('code') # 获取code值
sql = "update dydata set chenggong=chenggong+1 where user = '{}'" \
.format(user)
conn.ping(reconnect=True)
with db_lock:
restwo = cursor.execute(sql) # 被影响的行数
else:
resultcode['message'] = '用户名密码错误或余额不足'
return json.dumps(resultcode).encode("utf-8").decode('unicode_escape')
#反馈部分
@app.route('/feedbacka',methods=["GET"])
def feedback():
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 生成游标对象
resultcode = {'code': 1, 'message': ''}
user = request.args.get('user')
pwd = request.args.get('pwd')
phone = request.args.get('phone')
mark=request.args.get('mark')
if not all([user,pwd,phone,mark]):
resultcode['message'] = '参数不完整'
if mark=='1' or mark=='4':
resultcode['message'] = 'mark参数有误'
else:
src_fkurl = 'http://315.716.188.244:8081/api/consumer/registerNotify?pid={}&cid={}&tel={}&status={}&remark=&password={}' \
.format('20044', 'dy06', phone,mark, 'jie110120')
reponse = requests.get(src_fkurl) # 访问原始API
while reponse.status_code != 200:
reponse = requests.get(src_fkurl)
resultcode = json.loads(reponse.text) # 解析返回json
succode = resultcode.get('code') # 获取code值
if succode == "0000":
resultcode['message'] = '反馈成功'
else:
resultcode['message'] = '反馈失败'
return json.dumps(resultcode).encode('utf-8').decode('unicode_escape')
@app.route('/test',methods=["GET"])
def test():
return json.dumps('test')
if __name__ == '__main__':
app.run('0.0.0.0', 36001, threaded=True)
#主要报错
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
AttributeError: 'NoneType' object has no attribute 'settimeout'
TimeoutError: [Errno 110] Connection timed out
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f270a62eb00>: Failed to establish a new connection: [Errno 110] Connection timed out
urllib3.exceptions.MaxRetryError: HTTPConnectionPool.......
RuntimeError: reentrant call inside <_io.BufferedReader name=14>
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
http.client.RemoteDisconnected: Remote end closed connection without response
写了一个调用其他API接口获取数据的项目,调试正常。使用时会频繁报错,来先生教我
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
关注 你说你还剩下最后一个报错没有解决:urllib3.exceptions.MaxRetryError
由字面意思可以知道是http连接太多没有关闭导致的解决方法一:
- 增加http连接重试次数
requests.adapters.DEFAULT_RETRIES = 5
- 关闭多余的连接,因为requests使用了urllib3库,默认的http connection是keep-alive的,requests设置False关闭
s = requests.session() s.keep_alive = False
解决方法二:
是因为在每次数据传输前客户端要和服务器建立TCP连接,为节省传输消耗,默认为keep-alive,即连接一次,传输多次,然而在多次访问后不能结束并回到连接池中,导致不能产生新的连接
headers中的Connection默认为keep-alive,
将header中的Connection一项置为closeheaders = { 'Connection': 'close', } r = requests.get(url, headers=headers)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 求差集那个函数有问题,有无佬可以解决
- ¥15 MATLAB动图问题
- ¥15 【提问】基于Invest的水源涵养
- ¥20 微信网友居然可以通过vx号找到我绑的手机号
- ¥15 寻一个支付宝扫码远程授权登录的软件助手app
- ¥15 解riccati方程组
- ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
- ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
- ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
- ¥50 树莓派安卓APK系统签名