提交 bd1a0fca 编写于 作者: W wenxianping

1、增加cdn轮训功能

2、兼容Windows cmd命令乱码问题
3、规范接口提交参数
4、修改已知bug
上级 004b8283
# encoding=utf8
import collections
import datetime
import json
import re
import sys
import csv
import requests
from config import urlConf
from myUrllib.httpUtils import HTTPClient
reload(sys)
sys.setdefaultencoding('utf-8')
......@@ -88,7 +84,7 @@ class CDNProxy:
num += 1
except Exception as e:
print(e.message)
print("本次cdn获取完成,总个数{0}".format(num))
print(u"本次cdn获取完成,总个数{0}".format(num))
def all_cdn(self):
"""获取cdn列表"""
......@@ -96,21 +92,17 @@ class CDNProxy:
cdn = f.readlines()
return cdn
def cdn_par(self):
with open('./cdn_list', 'r') as f:
cdn = f.readlines()
print cdn
for i in cdn:
http = HTTPClient()
check_user_url = self.urlConf["loginInit"]
http.cdn = i.replace("\n", "")
start_time = datetime.datetime.now()
http.send(check_user_url)
print (datetime.datetime.now() - start_time).microseconds / 1000
def par_csv(self):
cdn_csv = csv.reader(open("../cdn1.csv", "r"))
for c in cdn_csv:
cdn_re = re.compile(r'https://(\S+)/otn/index/init')
cdn_ip = re.findall(cdn_re, c[0])
if cdn_ip and c[2] == "200":
print(cdn_ip[0])
if __name__ == '__main__':
cdn = CDNProxy("kyfw.12306.cn")
cdn = CDNProxy()
cdn.get_city_id()
# cdn.get_cdn_list()
cdn.cdn_par()
cdn.par_csv()
此差异已折叠。
......@@ -24,6 +24,7 @@
#is_aotu_code是否自动打码,如果选择Ture,则调用打码兔打码,默认不使用打码兔
#aotu_code_type 1为打码兔,2为若快
#is_email: 是否需要邮件通知 ex: True or False 切记,邮箱加完一定到config目录下测试emailConf功能是否正常
#is_cdn: 1为需要,2位本机ip查询
#邮箱配置 列举163
# email: "xxx@163.com"
......@@ -41,29 +42,17 @@
set:
station_dates:
# - "2018-01-27"
# - "2018-01-28"
# - "2018-02-22"
- "2018-02-24"
- "2018-02-02"
station_trains:
- "D2879"
- "G2366"
- "D1813"
- "D2975"
- "D1825"
- "D1829"
- "D2841"
- "D1833"
# - "K4300"
# - "K5226"
# - "K7772"
# - "G1329"
# - "G1359"
# - "G1361"
# - "G1373"
# - "G1363"
# - "G4933"
from_station: "三江南"
to_station: "广州南"
from_station: "邵阳"
to_station: "上海"
set_type:
- "一等座"
- "二等座"
......@@ -74,7 +63,7 @@ set:
12306count:
# - uesr: ""
# - pwd: "apple1995"
- uesr: "931128603@qq.com"
- uesr: "@qq.com"
- pwd: "QWERTY"
select_refresh_interval: 0.4
......@@ -84,14 +73,14 @@ aotu_code_type: 2
#enable_proxy: False
damatu:
uesr: "931128603"
uesr: ""
pwd: "qazWSX1995"
email_conf:
is_email: True
email: "931128603@qq.com "
email: "@qq.com "
notice_email_list: "61995120@qq.com"
username: "931128603"
username: ""
password: "xwopwxbkupbqbfgb"
host: "smtp.qq.com"
......
......@@ -6,7 +6,7 @@ urls = {
"auth": {
"req_url": "/passport/web/auth/uamtk",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -16,7 +16,7 @@ urls = {
"login": {
"req_url": "/passport/web/login",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/login/init",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -25,9 +25,9 @@ urls = {
},
"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",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/login/init",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -37,7 +37,7 @@ urls = {
"codeCheck": {
"req_url": "/passport/captcha/captcha-check",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/login/init",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -47,9 +47,9 @@ urls = {
"loginInit": {
"req_url": "/otn/login/init",
"req_type": "get",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/index/init",
"Host": "kyfw.12306.cn",
"re_try": 1,
"re_try": 10,
"re_time": 0.1,
"is_logger": False,
"is_json": False,
......@@ -57,7 +57,7 @@ urls = {
"getUserInfo": {
"req_url": "/otn/index/initMy12306",
"req_type": "get",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -67,7 +67,7 @@ urls = {
"userLogin": {
"req_url": "/otn/login/userLogin",
"req_type": "get",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -77,7 +77,7 @@ urls = {
"uamauthclient": {
"req_url": "/otn/uamauthclient",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -87,7 +87,7 @@ urls = {
"initdc_url": {
"req_url": "/otn/confirmPassenger/initDc",
"req_type": "get",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -97,7 +97,7 @@ urls = {
"get_passengerDTOs": {
"req_url": "/otn/confirmPassenger/getPassengerDTOs",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -107,7 +107,7 @@ urls = {
"select_url": {
"req_url": "/otn/leftTicket/queryZ?leftTicketDTO.train_date={0}&leftTicketDTO.from_station={1}&leftTicketDTO.to_station={2}&purpose_codes=ADULT",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -117,17 +117,17 @@ urls = {
"check_user_url": {
"req_url": "/otn/login/checkUser",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn",
"re_try": 1,
"re_time": 0.1,
"re_try": 10,
"re_time": 0.3,
"is_logger": True,
"is_json": True,
},
"submit_station_url": {
"req_url": "/otn/leftTicket/submitOrderRequest",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -137,7 +137,7 @@ urls = {
"checkOrderInfoUrl": {
"req_url": "/otn/confirmPassenger/checkOrderInfo",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -147,7 +147,7 @@ urls = {
"getQueueCountUrl": {
"req_url": "/otn/confirmPassenger/getQueueCount",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -157,7 +157,7 @@ urls = {
"checkQueueOrderUrl": {
"req_url": "/otn/confirmPassenger/confirmSingleForQueue",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -167,7 +167,7 @@ urls = {
"checkRandCodeAnsyn": {
"req_url": "/otn/passcodeNew/checkRandCodeAnsyn",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -177,7 +177,7 @@ urls = {
"codeImgByOrder": {
"req_url": "/otn/passcodeNew/getPassCodeNew?module=passenger&rand=randp&%s" % random.random(),
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -187,7 +187,7 @@ urls = {
"queryOrderWaitTimeUrl": {
"req_url": "/otn/confirmPassenger/queryOrderWaitTime",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/confirmPassenger/initDc",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -197,7 +197,7 @@ urls = {
"queryMyOrderNoCompleteUrl": {
"req_url": "/otn/queryOrder/queryMyOrderNoComplete",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -207,7 +207,7 @@ urls = {
"initNoCompleteUrl": {
"req_url": "/otn/queryOrder/initNoComplete",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......@@ -217,7 +217,7 @@ urls = {
"cancelNoCompleteMyOrder": {
"req_url": "/otn/queryOrder/cancelNoCompleteMyOrder",
"req_type": "post",
"Referer": "",
"Referer": "https://kyfw.12306.cn/otn/queryOrder/initNoComplete",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
......
......@@ -24,7 +24,7 @@ class GoLogin:
self.aotu_code_type = aotu_code_type
def cookietp(self):
print("正在获取cookie")
print(u"正在获取cookie")
url = self.urlConf["loginInit"]
self.httpClint.send(url)
# Url = "https://kyfw.12306.cn/otn/login/init"
......@@ -67,12 +67,12 @@ class GoLogin:
3.控制台输入对应下标,按照英文逗号分开,即可手动完成打码,
:return:
"""
print ("下载验证码...")
print (u"下载验证码...")
codeimgUrl = code_url
img_path = './tkcode'
result = self.httpClint.send(codeimgUrl)
try:
print("下载验证码成功")
print(u"下载验证码成功")
open(img_path, 'wb').write(result)
except OSError as e:
print (e)
......@@ -83,7 +83,7 @@ class GoLogin:
:return: str
"""
if is_raw_input:
Ofset = raw_input("请输入验证码: ")
Ofset = raw_input(u"请输入验证码: ")
select = Ofset.split(',')
post = []
offsetsX = 0 # 选择的答案的left值,通过浏览器点击8个小图的中点得到的,这样基本没问题
......@@ -118,7 +118,7 @@ class GoLogin:
post.append(offsetsX)
post.append(offsetsY)
randCode = str(post).replace(']', '').replace('[', '').replace("'", '').replace(' ', '')
print("验证码识别坐标为{0}".format(randCode))
print(u"验证码识别坐标为{0}".format(randCode))
return randCode
def auth(self):
......@@ -141,7 +141,7 @@ class GoLogin:
}
fresult = self.httpClint.send(codeCheck, codeCheckData)
if "result_code" in fresult and fresult["result_code"] == "4":
print ("验证码通过,开始登录..")
print (u"验证码通过,开始登录..")
return True
else:
if "result_message" in fresult:
......@@ -164,7 +164,7 @@ class GoLogin:
}
tresult = self.httpClint.send(logurl, logData)
if 'result_code' in tresult and tresult["result_code"] == 0:
print ("登录成功")
print (u"登录成功")
tk = self.auth()
if "newapptk" in tk and tk["newapptk"]:
return tk["newapptk"]
......@@ -172,11 +172,11 @@ class GoLogin:
return False
elif 'result_message' in tresult and 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))
else:
print ("登录失败: {0}".format(messages))
print ("尝试重新登陆")
print (u"登录失败: {0}".format(messages))
print (u"尝试重新登陆")
return False
else:
return False
......@@ -187,14 +187,14 @@ class GoLogin:
:return:
"""
if not uamtk:
return "权限校验码不能为空"
return u"权限校验码不能为空"
else:
uamauthclientUrl = self.urlConf["uamauthclient"]
data = {"tk": uamtk}
uamauthclientResult = self.httpClint.send(uamauthclientUrl, data)
if uamauthclientResult:
if "result_code" in uamauthclientResult and uamauthclientResult["result_code"] == 0:
print("欢迎 {} 登录".format(uamauthclientResult["username"]))
print(u"欢迎 {} 登录".format(uamauthclientResult["username"]))
return True
else:
return False
......@@ -213,14 +213,15 @@ class GoLogin:
if self.is_aotu_code and self.aotu_code_type == 1:
balance = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"]).getBalance()
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"]
if not user or not passwd:
raise UserPasswordException("温馨提示: 用户名或者密码为空,请仔细检查")
raise UserPasswordException(u"温馨提示: 用户名或者密码为空,请仔细检查")
login_num = 0
while True:
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.urlConf["getCodeImg"]["req_url"] = self.urlConf["getCodeImg"]["req_url"].format(random.random())
self.readImg(self.urlConf["getCodeImg"])
self.randCode = self.getRandCode()
login_num += 1
......@@ -235,9 +236,9 @@ class GoLogin:
url = 'https://kyfw.12306.cn/otn/login/loginOut'
result = myurllib2.get(url)
if result:
print ("已退出")
print (u"已退出")
else:
print ("退出失败")
print (u"退出失败")
# if __name__ == "__main__":
......
此差异已折叠。
......@@ -90,7 +90,8 @@ class HTTPClient(object):
"""send request to url.If response 200,return response, else return None."""
allow_redirects = False
is_logger = urls["is_logger"]
error_data = {"code": 99999, "message": "重试次数达到上限"}
error_data = {"code": 99999, "message": u"重试次数达到上限"}
self.setHeadersReferer(urls["Referer"])
if data:
method = "post"
self.setHeaders({"Content-Length": "{0}".format(len(data))})
......@@ -107,7 +108,6 @@ class HTTPClient(object):
url_host = urls["Host"]
for i in range(urls["re_try"]):
try:
print("https://" + url_host + urls["req_url"])
requests.packages.urllib3.disable_warnings()
response = self._s.request(method=method,
timeout=2,
......@@ -116,7 +116,6 @@ class HTTPClient(object):
allow_redirects=allow_redirects,
verify=False,
**kwargs)
print(response.status_code)
if response.status_code == 200:
if response.content:
if is_logger:
......
无法预览此类型文件
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册