1、增加cdn轮训功能

2、兼容Windows cmd命令乱码问题
3、规范接口提交参数
4、修改已知bug
dev
wenxianping 2018-01-29 21:59:01 +08:00
parent 004b82831d
commit bd1a0fcaa3
8 changed files with 1066 additions and 753 deletions

View File

@ -1,15 +1,11 @@
# encoding=utf8 # encoding=utf8
import collections import collections
import datetime
import json import json
import re import re
import sys import sys
import csv
import requests import requests
from config import urlConf from config import urlConf
from myUrllib.httpUtils import HTTPClient
reload(sys) reload(sys)
sys.setdefaultencoding('utf-8') sys.setdefaultencoding('utf-8')
@ -88,7 +84,7 @@ class CDNProxy:
num += 1 num += 1
except Exception as e: except Exception as e:
print(e.message) print(e.message)
print("本次cdn获取完成总个数{0}".format(num)) print(u"本次cdn获取完成总个数{0}".format(num))
def all_cdn(self): def all_cdn(self):
"""获取cdn列表""" """获取cdn列表"""
@ -96,21 +92,17 @@ class CDNProxy:
cdn = f.readlines() cdn = f.readlines()
return cdn return cdn
def cdn_par(self): def par_csv(self):
with open('./cdn_list', 'r') as f: cdn_csv = csv.reader(open("../cdn1.csv", "r"))
cdn = f.readlines() for c in cdn_csv:
print cdn cdn_re = re.compile(r'https://(\S+)/otn/index/init')
for i in cdn: cdn_ip = re.findall(cdn_re, c[0])
http = HTTPClient() if cdn_ip and c[2] == "200":
check_user_url = self.urlConf["loginInit"] print(cdn_ip[0])
http.cdn = i.replace("\n", "")
start_time = datetime.datetime.now()
http.send(check_user_url)
print (datetime.datetime.now() - start_time).microseconds / 1000
if __name__ == '__main__': if __name__ == '__main__':
cdn = CDNProxy("kyfw.12306.cn") cdn = CDNProxy()
cdn.get_city_id() cdn.get_city_id()
# cdn.get_cdn_list() # cdn.get_cdn_list()
cdn.cdn_par() cdn.par_csv()

1516
cdn_list

File diff suppressed because it is too large Load Diff

View File

@ -24,6 +24,7 @@
#is_aotu_code是否自动打码如果选择Ture,则调用打码兔打码,默认不使用打码兔 #is_aotu_code是否自动打码如果选择Ture,则调用打码兔打码,默认不使用打码兔
#aotu_code_type 1为打码兔2为若快 #aotu_code_type 1为打码兔2为若快
#is_email: 是否需要邮件通知 ex: True or False 切记邮箱加完一定到config目录下测试emailConf功能是否正常 #is_email: 是否需要邮件通知 ex: True or False 切记邮箱加完一定到config目录下测试emailConf功能是否正常
#is_cdn: 1为需要2位本机ip查询
#邮箱配置 列举163 #邮箱配置 列举163
# email: "xxx@163.com" # email: "xxx@163.com"
@ -41,29 +42,17 @@
set: set:
station_dates: station_dates:
# - "2018-01-27" - "2018-02-02"
# - "2018-01-28"
# - "2018-02-22"
- "2018-02-24"
station_trains: station_trains:
- "D2879" - "G2366"
- "D1813" - "D1813"
- "D2975" - "D2975"
- "D1825" - "D1825"
- "D1829" - "D1829"
- "D2841" - "D2841"
- "D1833" - "D1833"
# - "K4300" from_station: "邵阳"
# - "K5226" to_station: "上海"
# - "K7772"
# - "G1329"
# - "G1359"
# - "G1361"
# - "G1373"
# - "G1363"
# - "G4933"
from_station: "三江南"
to_station: "广州南"
set_type: set_type:
- "一等座" - "一等座"
- "二等座" - "二等座"
@ -74,7 +63,7 @@ set:
12306count: 12306count:
# - uesr: "" # - uesr: ""
# - pwd: "apple1995" # - pwd: "apple1995"
- uesr: "931128603@qq.com" - uesr: "@qq.com"
- pwd: "QWERTY" - pwd: "QWERTY"
select_refresh_interval: 0.4 select_refresh_interval: 0.4
@ -84,14 +73,14 @@ aotu_code_type: 2
#enable_proxy: False #enable_proxy: False
damatu: damatu:
uesr: "931128603" uesr: ""
pwd: "qazWSX1995" pwd: "qazWSX1995"
email_conf: email_conf:
is_email: True is_email: True
email: "931128603@qq.com " email: "@qq.com "
notice_email_list: "61995120@qq.com" notice_email_list: "61995120@qq.com"
username: "931128603" username: ""
password: "xwopwxbkupbqbfgb" password: "xwopwxbkupbqbfgb"
host: "smtp.qq.com" host: "smtp.qq.com"

View File

@ -6,7 +6,7 @@ urls = {
"auth": { "auth": {
"req_url": "/passport/web/auth/uamtk", "req_url": "/passport/web/auth/uamtk",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -16,7 +16,7 @@ urls = {
"login": { "login": {
"req_url": "/passport/web/login", "req_url": "/passport/web/login",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/login/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -25,9 +25,9 @@ urls = {
}, },
"getCodeImg": { "getCodeImg": {
"req_url": "/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&{0}".format(random.random()), "req_url": "/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&{0}",
"req_type": "get", "req_type": "get",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/login/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -37,7 +37,7 @@ urls = {
"codeCheck": { "codeCheck": {
"req_url": "/passport/captcha/captcha-check", "req_url": "/passport/captcha/captcha-check",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/login/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -47,9 +47,9 @@ urls = {
"loginInit": { "loginInit": {
"req_url": "/otn/login/init", "req_url": "/otn/login/init",
"req_type": "get", "req_type": "get",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/index/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 1, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
"is_logger": False, "is_logger": False,
"is_json": False, "is_json": False,
@ -57,7 +57,7 @@ urls = {
"getUserInfo": { "getUserInfo": {
"req_url": "/otn/index/initMy12306", "req_url": "/otn/index/initMy12306",
"req_type": "get", "req_type": "get",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -67,7 +67,7 @@ urls = {
"userLogin": { "userLogin": {
"req_url": "/otn/login/userLogin", "req_url": "/otn/login/userLogin",
"req_type": "get", "req_type": "get",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -77,7 +77,7 @@ urls = {
"uamauthclient": { "uamauthclient": {
"req_url": "/otn/uamauthclient", "req_url": "/otn/uamauthclient",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -87,7 +87,7 @@ urls = {
"initdc_url": { "initdc_url": {
"req_url": "/otn/confirmPassenger/initDc", "req_url": "/otn/confirmPassenger/initDc",
"req_type": "get", "req_type": "get",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -97,7 +97,7 @@ urls = {
"get_passengerDTOs": { "get_passengerDTOs": {
"req_url": "/otn/confirmPassenger/getPassengerDTOs", "req_url": "/otn/confirmPassenger/getPassengerDTOs",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -107,7 +107,7 @@ urls = {
"select_url": { "select_url": {
"req_url": "/otn/leftTicket/queryZ?leftTicketDTO.train_date={0}&leftTicketDTO.from_station={1}&leftTicketDTO.to_station={2}&purpose_codes=ADULT", "req_url": "/otn/leftTicket/queryZ?leftTicketDTO.train_date={0}&leftTicketDTO.from_station={1}&leftTicketDTO.to_station={2}&purpose_codes=ADULT",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -117,17 +117,17 @@ urls = {
"check_user_url": { "check_user_url": {
"req_url": "/otn/login/checkUser", "req_url": "/otn/login/checkUser",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 1, "re_try": 10,
"re_time": 0.1, "re_time": 0.3,
"is_logger": True, "is_logger": True,
"is_json": True, "is_json": True,
}, },
"submit_station_url": { "submit_station_url": {
"req_url": "/otn/leftTicket/submitOrderRequest", "req_url": "/otn/leftTicket/submitOrderRequest",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -137,7 +137,7 @@ urls = {
"checkOrderInfoUrl": { "checkOrderInfoUrl": {
"req_url": "/otn/confirmPassenger/checkOrderInfo", "req_url": "/otn/confirmPassenger/checkOrderInfo",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -147,7 +147,7 @@ urls = {
"getQueueCountUrl": { "getQueueCountUrl": {
"req_url": "/otn/confirmPassenger/getQueueCount", "req_url": "/otn/confirmPassenger/getQueueCount",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -157,7 +157,7 @@ urls = {
"checkQueueOrderUrl": { "checkQueueOrderUrl": {
"req_url": "/otn/confirmPassenger/confirmSingleForQueue", "req_url": "/otn/confirmPassenger/confirmSingleForQueue",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -167,7 +167,7 @@ urls = {
"checkRandCodeAnsyn": { "checkRandCodeAnsyn": {
"req_url": "/otn/passcodeNew/checkRandCodeAnsyn", "req_url": "/otn/passcodeNew/checkRandCodeAnsyn",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -177,7 +177,7 @@ urls = {
"codeImgByOrder": { "codeImgByOrder": {
"req_url": "/otn/passcodeNew/getPassCodeNew?module=passenger&rand=randp&%s" % random.random(), "req_url": "/otn/passcodeNew/getPassCodeNew?module=passenger&rand=randp&%s" % random.random(),
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -187,7 +187,7 @@ urls = {
"queryOrderWaitTimeUrl": { "queryOrderWaitTimeUrl": {
"req_url": "/otn/confirmPassenger/queryOrderWaitTime", "req_url": "/otn/confirmPassenger/queryOrderWaitTime",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -197,7 +197,7 @@ urls = {
"queryMyOrderNoCompleteUrl": { "queryMyOrderNoCompleteUrl": {
"req_url": "/otn/queryOrder/queryMyOrderNoComplete", "req_url": "/otn/queryOrder/queryMyOrderNoComplete",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -207,7 +207,7 @@ urls = {
"initNoCompleteUrl": { "initNoCompleteUrl": {
"req_url": "/otn/queryOrder/initNoComplete", "req_url": "/otn/queryOrder/initNoComplete",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,
@ -217,7 +217,7 @@ urls = {
"cancelNoCompleteMyOrder": { "cancelNoCompleteMyOrder": {
"req_url": "/otn/queryOrder/cancelNoCompleteMyOrder", "req_url": "/otn/queryOrder/cancelNoCompleteMyOrder",
"req_type": "post", "req_type": "post",
"Referer": "", "Referer": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete",
"Host": "kyfw.12306.cn", "Host": "kyfw.12306.cn",
"re_try": 10, "re_try": 10,
"re_time": 0.1, "re_time": 0.1,

View File

@ -24,7 +24,7 @@ class GoLogin:
self.aotu_code_type = aotu_code_type self.aotu_code_type = aotu_code_type
def cookietp(self): def cookietp(self):
print("正在获取cookie") print(u"正在获取cookie")
url = self.urlConf["loginInit"] url = self.urlConf["loginInit"]
self.httpClint.send(url) self.httpClint.send(url)
# Url = "https://kyfw.12306.cn/otn/login/init" # Url = "https://kyfw.12306.cn/otn/login/init"
@ -67,12 +67,12 @@ class GoLogin:
3.控制台输入对应下标按照英文逗号分开即可手动完成打码 3.控制台输入对应下标按照英文逗号分开即可手动完成打码
:return: :return:
""" """
print ("下载验证码...") print (u"下载验证码...")
codeimgUrl = code_url codeimgUrl = code_url
img_path = './tkcode' img_path = './tkcode'
result = self.httpClint.send(codeimgUrl) result = self.httpClint.send(codeimgUrl)
try: try:
print("下载验证码成功") print(u"下载验证码成功")
open(img_path, 'wb').write(result) open(img_path, 'wb').write(result)
except OSError as e: except OSError as e:
print (e) print (e)
@ -83,7 +83,7 @@ class GoLogin:
:return: str :return: str
""" """
if is_raw_input: if is_raw_input:
Ofset = raw_input("请输入验证码: ") Ofset = raw_input(u"请输入验证码: ")
select = Ofset.split(',') select = Ofset.split(',')
post = [] post = []
offsetsX = 0 # 选择的答案的left值,通过浏览器点击8个小图的中点得到的,这样基本没问题 offsetsX = 0 # 选择的答案的left值,通过浏览器点击8个小图的中点得到的,这样基本没问题
@ -118,7 +118,7 @@ class GoLogin:
post.append(offsetsX) post.append(offsetsX)
post.append(offsetsY) post.append(offsetsY)
randCode = str(post).replace(']', '').replace('[', '').replace("'", '').replace(' ', '') randCode = str(post).replace(']', '').replace('[', '').replace("'", '').replace(' ', '')
print("验证码识别坐标为{0}".format(randCode)) print(u"验证码识别坐标为{0}".format(randCode))
return randCode return randCode
def auth(self): def auth(self):
@ -141,7 +141,7 @@ class GoLogin:
} }
fresult = self.httpClint.send(codeCheck, codeCheckData) fresult = self.httpClint.send(codeCheck, codeCheckData)
if "result_code" in fresult and fresult["result_code"] == "4": if "result_code" in fresult and fresult["result_code"] == "4":
print ("验证码通过,开始登录..") print (u"验证码通过,开始登录..")
return True return True
else: else:
if "result_message" in fresult: if "result_message" in fresult:
@ -164,7 +164,7 @@ class GoLogin:
} }
tresult = self.httpClint.send(logurl, logData) tresult = self.httpClint.send(logurl, logData)
if 'result_code' in tresult and tresult["result_code"] == 0: if 'result_code' in tresult and tresult["result_code"] == 0:
print ("登录成功") print (u"登录成功")
tk = self.auth() tk = self.auth()
if "newapptk" in tk and tk["newapptk"]: if "newapptk" in tk and tk["newapptk"]:
return tk["newapptk"] return tk["newapptk"]
@ -172,11 +172,11 @@ class GoLogin:
return False return False
elif 'result_message' in tresult and tresult['result_message']: elif 'result_message' in tresult and tresult['result_message']:
messages = tresult['result_message'] messages = tresult['result_message']
if messages.find("密码输入错误") is not -1: if messages.find(u"密码输入错误") is not -1:
raise UserPasswordException("{0}".format(messages)) raise UserPasswordException("{0}".format(messages))
else: else:
print ("登录失败: {0}".format(messages)) print (u"登录失败: {0}".format(messages))
print ("尝试重新登陆") print (u"尝试重新登陆")
return False return False
else: else:
return False return False
@ -187,14 +187,14 @@ class GoLogin:
:return: :return:
""" """
if not uamtk: if not uamtk:
return "权限校验码不能为空" return u"权限校验码不能为空"
else: else:
uamauthclientUrl = self.urlConf["uamauthclient"] uamauthclientUrl = self.urlConf["uamauthclient"]
data = {"tk": uamtk} data = {"tk": uamtk}
uamauthclientResult = self.httpClint.send(uamauthclientUrl, data) uamauthclientResult = self.httpClint.send(uamauthclientUrl, data)
if uamauthclientResult: if uamauthclientResult:
if "result_code" in uamauthclientResult and uamauthclientResult["result_code"] == 0: if "result_code" in uamauthclientResult and uamauthclientResult["result_code"] == 0:
print("欢迎 {} 登录".format(uamauthclientResult["username"])) print(u"欢迎 {} 登录".format(uamauthclientResult["username"]))
return True return True
else: else:
return False return False
@ -213,14 +213,15 @@ class GoLogin:
if self.is_aotu_code and self.aotu_code_type == 1: if self.is_aotu_code and self.aotu_code_type == 1:
balance = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"]).getBalance() balance = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"]).getBalance()
if int(balance) < 40: if int(balance) < 40:
raise balanceException('余额不足,当前余额为: {}'.format(balance)) raise balanceException(u'余额不足,当前余额为: {}'.format(balance))
user, passwd = _get_yaml()["set"]["12306count"][0]["uesr"], _get_yaml()["set"]["12306count"][1]["pwd"] user, passwd = _get_yaml()["set"]["12306count"][0]["uesr"], _get_yaml()["set"]["12306count"][1]["pwd"]
if not user or not passwd: if not user or not passwd:
raise UserPasswordException("温馨提示: 用户名或者密码为空,请仔细检查") raise UserPasswordException(u"温馨提示: 用户名或者密码为空,请仔细检查")
login_num = 0 login_num = 0
while True: while True:
self.cookietp() self.cookietp()
self.httpClint.set_cookies(_jc_save_wfdc_flag="dc", _jc_save_fromStation="%u4E0A%u6D77%u8679%u6865%2CAOH", _jc_save_toStation="%u5170%u5DDE%u897F%2CLAJ", _jc_save_fromDate="2018-02-14", _jc_save_toDate="2018-01-16", RAIL_DEVICEID="EN_3_EGSe2GWGHXJeCkFQ52kHvNCrNlkz9n1GOqqQ1wR0i98WsD8Gj-a3YHZ-XYKeESWgCiJyyucgSwkFOzVHhHqfpidLPcm2vK9n83uzOPuShO3Pl4lCydAtQu4BdFqz-RVmiduNFixrcrN_Ny43135JiEtqLaI") self.httpClint.set_cookies(_jc_save_wfdc_flag="dc", _jc_save_fromStation="%u4E0A%u6D77%u8679%u6865%2CAOH", _jc_save_toStation="%u5170%u5DDE%u897F%2CLAJ", _jc_save_fromDate="2018-02-14", _jc_save_toDate="2018-01-16", RAIL_DEVICEID="EN_3_EGSe2GWGHXJeCkFQ52kHvNCrNlkz9n1GOqqQ1wR0i98WsD8Gj-a3YHZ-XYKeESWgCiJyyucgSwkFOzVHhHqfpidLPcm2vK9n83uzOPuShO3Pl4lCydAtQu4BdFqz-RVmiduNFixrcrN_Ny43135JiEtqLaI")
self.urlConf["getCodeImg"]["req_url"] = self.urlConf["getCodeImg"]["req_url"].format(random.random())
self.readImg(self.urlConf["getCodeImg"]) self.readImg(self.urlConf["getCodeImg"])
self.randCode = self.getRandCode() self.randCode = self.getRandCode()
login_num += 1 login_num += 1
@ -235,9 +236,9 @@ class GoLogin:
url = 'https://kyfw.12306.cn/otn/login/loginOut' url = 'https://kyfw.12306.cn/otn/login/loginOut'
result = myurllib2.get(url) result = myurllib2.get(url)
if result: if result:
print ("已退出") print (u"已退出")
else: else:
print ("退出失败") print (u"退出失败")
# if __name__ == "__main__": # if __name__ == "__main__":

View File

@ -1,6 +1,7 @@
# -*- coding=utf-8 -*- # -*- coding=utf-8 -*-
import datetime import datetime
import json import json
import random
import re import re
import socket import socket
import sys import sys
@ -31,6 +32,7 @@ class select:
self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, self.ticke_peoples, self.select_refresh_interval, self.station_trains, self.ticket_black_list_time = self.get_ticket_info() self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, self.ticke_peoples, self.select_refresh_interval, self.station_trains, self.ticket_black_list_time = self.get_ticket_info()
self.is_aotu_code = _get_yaml()["is_aotu_code"] self.is_aotu_code = _get_yaml()["is_aotu_code"]
self.aotu_code_type = _get_yaml()["aotu_code_type"] self.aotu_code_type = _get_yaml()["aotu_code_type"]
self.is_cdn = _get_yaml()["is_cdn"]
self.order_request_params = {} # 订单提交时的参数 self.order_request_params = {} # 订单提交时的参数
self.ticketInfoForPassengerForm = {} # 初始化当前页面参数 self.ticketInfoForPassengerForm = {} # 初始化当前页面参数
self.current_seats = {} # 席别信息 self.current_seats = {} # 席别信息
@ -63,7 +65,7 @@ class select:
station_trains = ticket_info_config["set"]["station_trains"] station_trains = ticket_info_config["set"]["station_trains"]
ticket_black_list_time = ticket_info_config["ticket_black_list_time"] ticket_black_list_time = ticket_info_config["ticket_black_list_time"]
print "*"*20 print "*"*20
print "当前配置:出发站:{0}\n到达站:{1}\n乘车日期:{2}\n坐席:{3}\n是否有票自动提交:{4}\n乘车人:{5}\n刷新间隔:{6}\n候选购买车次:{7}\n僵尸票关小黑屋时长:{8}\n".format\ print u"当前配置:出发站:{0}\n到达站:{1}\n乘车日期:{2}\n坐席:{3}\n是否有票自动提交:{4}\n乘车人:{5}\n刷新间隔:{6}\n候选购买车次:{7}\n僵尸票关小黑屋时长:{8}\n".format\
( (
from_station, from_station,
to_station, to_station,
@ -203,8 +205,8 @@ class select:
elif 'messages' in jsonData and jsonData['messages']: elif 'messages' in jsonData and jsonData['messages']:
print(jsonData['messages'][0]) print(jsonData['messages'][0])
else: else:
print("未查找到常用联系人") print(u"未查找到常用联系人")
raise PassengerUserException("未查找到常用联系人,请先添加联系人在试试") raise PassengerUserException(u"未查找到常用联系人,请先添加联系人在试试")
def submitOrderRequestFunc(self, from_station, to_station, station_date=None): def submitOrderRequestFunc(self, from_station, to_station, station_date=None):
self.confUrl["select_url"]["req_url"] = self.confUrl["select_url"]["req_url"].format( self.confUrl["select_url"]["req_url"] = self.confUrl["select_url"]["req_url"].format(
@ -231,7 +233,7 @@ class select:
for station_ticket in station_tickets: for station_ticket in station_tickets:
value = station_ticket['data'] value = station_ticket['data']
if not value: if not value:
print ('{0}-{1} 车次坐席查询为空...'.format(self.from_station, self.to_station)) print (u'{0}-{1} 车次坐席查询为空...'.format(self.from_station, self.to_station))
else: else:
if value['result']: if value['result']:
for i in value['result']: for i in value['result']:
@ -244,13 +246,13 @@ class select:
# tiket_values = [k for k in value['map'].values()] # tiket_values = [k for k in value['map'].values()]
self.secretStr = ticket_info[0] self.secretStr = ticket_info[0]
train_no = ticket_info[3] train_no = ticket_info[3]
print ('车次: ' + train_no + ' 始发车站: ' + self.from_station + ' 终点站: ' + print (u'车次: ' + train_no + ' 始发车站: ' + self.from_station + ' 终点站: ' +
self.to_station + ' ' + self._station_seat[j].encode("utf8") + ':' + ticket_info[self.station_seat(self._station_seat[j].encode("utf8"))]) self.to_station + ' ' + self._station_seat[j].encode("utf8") + ':' + ticket_info[self.station_seat(self._station_seat[j].encode("utf8"))])
if self.ticket_black_list.has_key(train_no) and (datetime.datetime.now() - self.ticket_black_list[train_no]).seconds/60 < int(self.ticket_black_list_time): if self.ticket_black_list.has_key(train_no) and (datetime.datetime.now() - self.ticket_black_list[train_no]).seconds/60 < int(self.ticket_black_list_time):
print("该车次{} 正在被关小黑屋,跳过此车次".format(train_no)) print(u"该车次{} 正在被关小黑屋,跳过此车次".format(train_no))
break break
else: else:
print ('正在尝试提交订票...') print (u'正在尝试提交订票...')
# self.submitOrderRequestFunc(from_station, to_station, self.time()) # self.submitOrderRequestFunc(from_station, to_station, self.time())
self.submit_station() self.submit_station()
@ -266,7 +268,7 @@ class select:
pass pass
# time.sleep(self.expect_refresh_interval) # time.sleep(self.expect_refresh_interval)
else: else:
print "车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket) print u"车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket)
def check_user(self): def check_user(self):
""" """
@ -281,13 +283,13 @@ class select:
self.is_check_user["user_time"] = datetime.datetime.now() self.is_check_user["user_time"] = datetime.datetime.now()
else: else:
if check_user['messages']: if check_user['messages']:
print ('用户检查失败:%s可能未登录可能session已经失效' % check_user['messages'][0]) print (u'用户检查失败:%s可能未登录可能session已经失效' % check_user['messages'][0])
print ('正在尝试重新登录') print (u'正在尝试重新登录')
self.call_login() self.call_login()
self.is_check_user["user_time"] = datetime.datetime.now() self.is_check_user["user_time"] = datetime.datetime.now()
else: else:
print ('用户检查失败: %s可能未登录可能session已经失效' % check_user) print (u'用户检查失败: %s可能未登录可能session已经失效' % check_user)
print ('正在尝试重新登录') print (u'正在尝试重新登录')
self.call_login() self.call_login()
self.is_check_user["user_time"] = datetime.datetime.now() self.is_check_user["user_time"] = datetime.datetime.now()
@ -313,9 +315,9 @@ class select:
submitResult = self.httpClint.send(submit_station_url, data) submitResult = self.httpClint.send(submit_station_url, data)
if 'data' in submitResult and submitResult['data']: if 'data' in submitResult and submitResult['data']:
if submitResult['data'] == 'N': if submitResult['data'] == 'N':
print ('出票成功') print (u'出票成功')
else: else:
print ('出票失败') print (u'出票失败')
elif 'messages' in submitResult and submitResult['messages']: elif 'messages' in submitResult and submitResult['messages']:
raise ticketIsExitsException(submitResult['messages'][0]) raise ticketIsExitsException(submitResult['messages'][0])
@ -352,7 +354,7 @@ class select:
passengerTicketStrList = [] passengerTicketStrList = []
oldPassengerStr = [] oldPassengerStr = []
if not self.user_info: if not self.user_info:
raise PassengerUserException("联系人不在列表中,请查证后添加") raise PassengerUserException(u"联系人不在列表中,请查证后添加")
if len(self.user_info) is 1: if len(self.user_info) is 1:
passengerTicketStrList.append( passengerTicketStrList.append(
'0,' + self.user_info[0]['passenger_type'] + "," + self.user_info[0][ '0,' + self.user_info[0]['passenger_type'] + "," + self.user_info[0][
@ -394,12 +396,10 @@ class select:
if 'data' in checkOrderInfo: if 'data' in checkOrderInfo:
if "ifShowPassCode" in checkOrderInfo["data"] and checkOrderInfo["data"]["ifShowPassCode"] == "Y": if "ifShowPassCode" in checkOrderInfo["data"] and checkOrderInfo["data"]["ifShowPassCode"] == "Y":
is_need_code = True is_need_code = True
t = threading.Thread(target=self.callRandCode())
t.start()
if self.getQueueCount(train_no, set_type, is_need_code): if self.getQueueCount(train_no, set_type, is_need_code):
return True return True
if "ifShowPassCode" in checkOrderInfo["data"] and checkOrderInfo['data']['submitStatus'] is True: if "ifShowPassCode" in checkOrderInfo["data"] and checkOrderInfo['data']['submitStatus'] is True:
print ('车票提交通过,正在尝试排队') print (u'车票提交通过,正在尝试排队')
is_need_code = False is_need_code = False
if self.getQueueCount(train_no, set_type, is_need_code): if self.getQueueCount(train_no, set_type, is_need_code):
return True return True
@ -442,25 +442,25 @@ class select:
countT = getQueueCountResult["data"]["countT"] countT = getQueueCountResult["data"]["countT"]
if int(countT) is 0: if int(countT) is 0:
if int(ticket_split) < len(self.user_info): if int(ticket_split) < len(self.user_info):
print("当前余票数小于乘车人数,放弃订票") print(u"当前余票数小于乘车人数,放弃订票")
else: else:
print("排队成功, 当前余票还剩余: {0}".format(ticket_split)) print(u"排队成功, 当前余票还剩余: {0}".format(ticket_split))
if self.checkQueueOrder(is_need_code): if self.checkQueueOrder(is_need_code):
return True return True
else: else:
print("当前排队人数:" + str(countT) + "当前余票还剩余:{0} 张,继续排队中".format(ticket_split)) print(u"当前排队人数: {1} 当前余票还剩余:{0} 张,继续排队中".format(ticket_split, countT))
else: else:
print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no)) print(u"排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no))
self.ticket_black_list[train_no] = datetime.datetime.now() self.ticket_black_list[train_no] = datetime.datetime.now()
elif "messages" in getQueueCountResult and getQueueCountResult["messages"]: elif "messages" in getQueueCountResult and getQueueCountResult["messages"]:
print("排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no)) print(u"排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no))
self.ticket_black_list[train_no] = datetime.datetime.now() self.ticket_black_list[train_no] = datetime.datetime.now()
else: else:
if "validateMessages" in getQueueCountResult and getQueueCountResult["validateMessages"]: if "validateMessages" in getQueueCountResult and getQueueCountResult["validateMessages"]:
print(str(getQueueCountResult["validateMessages"])) print(str(getQueueCountResult["validateMessages"]))
self.ticket_black_list[train_no] = datetime.datetime.now() self.ticket_black_list[train_no] = datetime.datetime.now()
else: else:
print("未知错误 {0}".format("".join(getQueueCountResult))) print(u"未知错误 {0}".format("".join(getQueueCountResult)))
def checkRandCodeAnsyn(self, randCode): def checkRandCodeAnsyn(self, randCode):
""" """
@ -502,40 +502,40 @@ class select:
try: try:
if is_node_code: if is_node_code:
print("正在使用自动识别验证码功能") print(u"正在使用自动识别验证码功能")
for i in range(3): for i in range(3):
codeImgByOrder = self.confUrl["codeImgByOrder"] codeImgByOrder = self.confUrl["codeImgByOrder"]
self.login.readImg(codeImgByOrder) self.login.readImg(codeImgByOrder)
randCode = self.login.getRandCode() randCode = self.login.getRandCode()
checkcode = self.checkRandCodeAnsyn(randCode) checkcode = self.checkRandCodeAnsyn(randCode)
if checkcode == 'TRUE': if checkcode == 'TRUE':
print("验证码通过,正在提交订单") print(u"验证码通过,正在提交订单")
data['randCode'] = randCode data['randCode'] = randCode
break break
else: else:
print ("验证码有误, {0}次尝试重试".format(i+1)) print (u"验证码有误, {0}次尝试重试".format(i+1))
print("验证码超过限定次数3次放弃此次订票机会!") print(u"验证码超过限定次数3次放弃此次订票机会!")
else: else:
print("不需要验证码") print(u"不需要验证码")
time.sleep(0.5) time.sleep(0.5)
checkQueueOrderResult = self.httpClint.send(checkQueueOrderUrl, data) checkQueueOrderResult = self.httpClint.send(checkQueueOrderUrl, data)
if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]: if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]:
c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {} c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {}
if 'submitStatus' in c_data and c_data['submitStatus'] is True: if 'submitStatus' in c_data and c_data['submitStatus'] is True:
print("提交订单成功!") print(u"提交订单成功!")
self.queryOrderWaitTime() self.queryOrderWaitTime()
else: else:
if 'errMsg' in c_data and c_data['errMsg']: if 'errMsg' in c_data and c_data['errMsg']:
print("提交订单失败,{0}".format(c_data['errMsg'])) print(u"提交订单失败,{0}".format(c_data['errMsg']))
else: else:
print(c_data) print(c_data)
print('订票失败!很抱歉,请重试提交预订功能!') print(u'订票失败!很抱歉,请重试提交预订功能!')
elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]:
print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) print(u"提交订单失败,错误信息: " + checkQueueOrderResult["messages"])
else: else:
print("提交订单中,请耐心等待:" + checkQueueOrderResult["message"]) print(u"提交订单中,请耐心等待:" + checkQueueOrderResult["message"])
except ValueError: except ValueError:
print("接口 {} 无响应".format(checkQueueOrderUrl)) print(u"接口 {} 无响应".format(checkQueueOrderUrl))
def queryOrderWaitTime(self): def queryOrderWaitTime(self):
""" """
@ -547,7 +547,7 @@ class select:
_random = int(round(time.time() * 1000)) _random = int(round(time.time() * 1000))
num += 1 num += 1
if num > 30: if num > 30:
print("超出排队时间,自动放弃,正在重新刷票") print(u"超出排队时间,自动放弃,正在重新刷票")
order_id = self.queryMyOrderNoComplete() # 排队失败,自动取消排队订单 order_id = self.queryMyOrderNoComplete() # 排队失败,自动取消排队订单
if order_id: if order_id:
self.cancelNoCompleteMyOrder(order_id) self.cancelNoCompleteMyOrder(order_id)
@ -561,25 +561,25 @@ class select:
if queryOrderWaitTimeResult: if queryOrderWaitTimeResult:
if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]: if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]:
if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] is not None: if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] is not None:
sendEmail("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(queryOrderWaitTimeResult["data"]["orderId"])) sendEmail(u"恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(queryOrderWaitTimeResult["data"]["orderId"]))
raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(queryOrderWaitTimeResult["data"]["orderId"])) raise ticketIsExitsException(u"恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(queryOrderWaitTimeResult["data"]["orderId"]))
elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]: elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]:
print queryOrderWaitTimeResult["data"]["msg"] print queryOrderWaitTimeResult["data"]["msg"]
break break
elif "waitTime"in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["waitTime"]: elif "waitTime"in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["waitTime"]:
print("排队等待时间预计还剩 {0} ms".format(0-queryOrderWaitTimeResult["data"]["waitTime"])) print(u"排队等待时间预计还剩 {0} ms".format(0-queryOrderWaitTimeResult["data"]["waitTime"]))
else: else:
print ("正在等待中") print ("正在等待中")
elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]: elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]:
print("排队等待失败: " + queryOrderWaitTimeResult["messages"]) print(u"排队等待失败: " + queryOrderWaitTimeResult["messages"])
else: else:
print("{}次排队中,请耐心等待".format(num+1)) print(u"{}次排队中,请耐心等待".format(num+1))
else: else:
print("排队中") print(u"排队中")
time.sleep(2) time.sleep(2)
else: else:
print(ticketNumOutException("订单提交失败!,正在重新刷票")) print(ticketNumOutException(u"订单提交失败!,正在重新刷票"))
def queryMyOrderNoComplete(self): def queryMyOrderNoComplete(self):
""" """
@ -608,7 +608,7 @@ class select:
else: else:
return False return False
else: else:
print("接口 {} 无响应".format(queryMyOrderNoCompleteUrl)) print(u"接口 {} 无响应".format(queryMyOrderNoCompleteUrl))
def initNoComplete(self): def initNoComplete(self):
""" """
@ -634,19 +634,24 @@ class select:
} }
cancelNoCompleteMyOrderResult = self.httpClint.send(cancelNoCompleteMyOrderUrl, cancelNoCompleteMyOrderData) cancelNoCompleteMyOrderResult = self.httpClint.send(cancelNoCompleteMyOrderUrl, cancelNoCompleteMyOrderData)
if "data" in cancelNoCompleteMyOrderResult and "existError" in cancelNoCompleteMyOrderResult["data"] and cancelNoCompleteMyOrderResult["data"]["existError"] == "N": if "data" in cancelNoCompleteMyOrderResult and "existError" in cancelNoCompleteMyOrderResult["data"] and cancelNoCompleteMyOrderResult["data"]["existError"] == "N":
print("排队超时,已为您自动取消订单,订单编号: {0}".format(sequence_no)) print(u"排队超时,已为您自动取消订单,订单编号: {0}".format(sequence_no))
time.sleep(2) time.sleep(2)
return True return True
else: else:
print("排队超时,取消订单失败, 订单号{0}".format(sequence_no)) print(u"排队超时,取消订单失败, 订单号{0}".format(sequence_no))
def set_cdn(self): def set_cdn(self):
""" """
设置cdn 设置cdn
:return: :return:
""" """
# self.httpClint.cdn = eval(self.cdn_list[random.randint(0, len(self.cdn_list)-1)])["result"].replace("'", "") if self.is_cdn == 1:
self.httpClint.cdn = self.cdn_list while True:
if self.cdn_list:
self.httpClint.cdn = self.cdn_list[random.randint(0, len(self.cdn_list)-1)]
break
else:
pass
def call_login(self, auth=False): def call_login(self, auth=False):
""" """
@ -658,17 +663,37 @@ class select:
else: else:
self.login.go_login() self.login.go_login()
def main(self): def cdn_req(self, cdn):
is_cdn = _get_yaml()["is_cdn"] for i in range(len(cdn)-1):
if is_cdn == 1: http = HTTPClient()
urls = self.confUrl["loginInit"]
start_time = datetime.datetime.now()
http.cdn = cdn[i].replace("\n", "")
rep = http.send(urls)
if rep and "message" not in rep and (datetime.datetime.now() - start_time).microseconds / 1000 < 400:
self.cdn_list.append(cdn[i].replace("\n", ""))
def cdn_certification(self):
"""
cdn 认证
:return:
"""
if self.is_cdn == 1:
CDN = CDNProxy() CDN = CDNProxy()
self.cdn_list = CDN.all_cdn() all_cdn = CDN.all_cdn()
if self.cdn_list: if all_cdn:
print("开启cdn查询") print(u"开启cdn查询")
print("本次cdn总数为{}".format(len(self.cdn_list))) print(u"本次待筛选cdn总数为{}".format(len(all_cdn)))
self.set_cdn() t = threading.Thread(target=self.cdn_req, args=(all_cdn,))
t.start()
else: else:
raise ticketConfigException("cdn列表为空请先加载cdn") raise ticketConfigException(u"cdn列表为空请先加载cdn")
else:
pass
def main(self):
self.cdn_certification()
self.set_cdn()
self.call_login() self.call_login()
from_station, to_station = self.station_table(self.from_station, self.to_station) from_station, to_station = self.station_table(self.from_station, self.to_station)
self.check_user() self.check_user()
@ -682,14 +707,17 @@ class select:
self.check_user() self.check_user()
time.sleep(self.select_refresh_interval) time.sleep(self.select_refresh_interval)
if time.strftime('%H:%M:%S', time.localtime(time.time())) > "23:00:00": if time.strftime('%H:%M:%S', time.localtime(time.time())) > "23:00:00":
print "12306休息时间本程序自动停止,明天早上6点将自动运行" print u"12306休息时间本程序自动停止,明天早上6点将自动运行"
time.sleep(60 * 60 * 7) time.sleep(60 * 60 * 7)
self.call_login() self.call_login()
start_time = datetime.datetime.now() start_time = datetime.datetime.now()
self.submitOrderRequestImplement(from_station, to_station) self.submitOrderRequestImplement(from_station, to_station)
print "正在第{0}次查询 乘车日期: {1} 车次{2} 查询无票 cdn轮询IP {4} 总耗时{3}ms".format(num, ",".join(self.station_dates), ",".join(self.station_trains), (datetime.datetime.now()-start_time).microseconds/1000, self.httpClint.cdn) print u"正在第{0}次查询 乘车日期: {1} 车次{2} 查询无票 cdn轮询IP {4} 当前cdn总数{5} 总耗时{3}ms".format(num,
if is_cdn == 1: ",".join(self.station_dates),
self.set_cdn() ",".join(self.station_trains),
(datetime.datetime.now()-start_time).microseconds/1000, self.httpClint.cdn,
len(self.cdn_list))
self.set_cdn()
except PassengerUserException as e: except PassengerUserException as e:
print e.message print e.message
break break
@ -707,13 +735,13 @@ class select:
break break
except ValueError as e: except ValueError as e:
if e.message == "No JSON object could be decoded": if e.message == "No JSON object could be decoded":
print("12306接口无响应正在重试") print(u"12306接口无响应正在重试")
else: else:
print(e.message) print(e.message)
except KeyError as e: except KeyError as e:
print(e.message) print(e.message)
except TypeError as e: except TypeError as e:
print("12306接口无响应正在重试 {0}".format(e.message)) print(u"12306接口无响应正在重试 {0}".format(e.message))
except socket.error as e: except socket.error as e:
print(e.message) print(e.message)

View File

@ -90,7 +90,8 @@ class HTTPClient(object):
"""send request to url.If response 200,return response, else return None.""" """send request to url.If response 200,return response, else return None."""
allow_redirects = False allow_redirects = False
is_logger = urls["is_logger"] is_logger = urls["is_logger"]
error_data = {"code": 99999, "message": "重试次数达到上限"} error_data = {"code": 99999, "message": u"重试次数达到上限"}
self.setHeadersReferer(urls["Referer"])
if data: if data:
method = "post" method = "post"
self.setHeaders({"Content-Length": "{0}".format(len(data))}) self.setHeaders({"Content-Length": "{0}".format(len(data))})
@ -107,7 +108,6 @@ class HTTPClient(object):
url_host = urls["Host"] url_host = urls["Host"]
for i in range(urls["re_try"]): for i in range(urls["re_try"]):
try: try:
print("https://" + url_host + urls["req_url"])
requests.packages.urllib3.disable_warnings() requests.packages.urllib3.disable_warnings()
response = self._s.request(method=method, response = self._s.request(method=method,
timeout=2, timeout=2,
@ -116,7 +116,6 @@ class HTTPClient(object):
allow_redirects=allow_redirects, allow_redirects=allow_redirects,
verify=False, verify=False,
**kwargs) **kwargs)
print(response.status_code)
if response.status_code == 200: if response.status_code == 200:
if response.content: if response.content:
if is_logger: if is_logger:

BIN
tkcode

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB