def rk_create(self, im_string, timeout=60): """ im: 图片字节 im_type: 题目类型 """ params = { 'typeid': 6113, 'timeout': timeout, } params.update(self.base_params) files = {'image': ('a.jpg', im_string)} while True: try: r = requests.post('http://api.ruokuai.com/create.json', data=params, files=files, headers=self.headers) # Log.v("使用若快进行验证码识别") data = r.json() break except requests.RequestException: Log.w("提交若快打码请求出现问题, 正在重试中...") continue Log.d(data) return data
def _get_device_fingerprint(self): if not hasattr(Config, "device_fingerprint"): query = dict(parse.parse_qsl(DEVICE_FINGERPRINT)) else: query = dict(parse.parse_qsl(Config.device_fingerprint)) query["timestamp"] = int(time.time() * 1000) data = send_requests(LOGIN_SESSION, DEVICE_FINGERPRINT_MAPPING, params=query) Log.d(data) if not data: return False, "获取设备ID请求失败" m = re.compile(r'callbackFunction\(\'(.*)\'\)') f = m.search(data) msg = "获取设备ID失败" if not f: Log.v(msg) return False, msg result = ast.literal_eval(f.group(1)) # update cookie LOGIN_SESSION.cookies.update( { "RAIL_EXPIRATION": result.get("exp"), "RAIL_DEVICEID": result.get("dfp") } ) Log.v("获取设备ID成功") return True, "OK"
def _uamtk(self): json_data = send_requests(LOGIN_SESSION, self.URLS["uamtk"], data={'appid': 'otn'}) Log.d(json_data) result, msg = json_status(json_data, ["result_message", "newapptk"]) if not result: return result, msg, None else: return result, msg, json_data["newapptk"]
def send_requests(session, urlmapping_obj, params=None, data=None, **kwargs): session.headers.update(urlmapping_obj.headers) if urlmapping_obj.method.lower() == 'post': session.headers.update( {"Content-Type": r'application/x-www-form-urlencoded; charset=UTF-8'} ) else: session.headers.pop("Content-Type", None) try: Log.d("请求 url {url}".format(url=urlmapping_obj.url)) try: response = session.request(method=urlmapping_obj.method, url=urlmapping_obj.url, params=params, data=data, timeout=10, # allow_redirects=False, **kwargs) except requests.RequestException as e: Log.w(e) Log.w("请求{0}异常 ".format(urlmapping_obj.url)) raise ResponseError if params: Log.d("{url} Get 参数 {data}".format(url=urlmapping_obj.url, data=params)) if data: Log.d("{url} Post 参数 {data}".format(url=urlmapping_obj.url, data=data)) Log.d("返回response url {url}".format(url=response.url)) if response.status_code == requests.codes.ok: if 'xhtml+xml' in response.headers['Content-Type']: data = response.text root = ET.fromstring(data) result = {v.tag: v.text for v in root.getchildren()} return result if 'json' in response.headers['Content-Type']: result = response.json() Log.d("{url} 返回值 {result}".format(url=urlmapping_obj.url, result=result)) return result # other type return response.text else: Log.w(response.url) Log.w(response.status_code) Log.w("返回状态码有问题") except Exception as e: Log.e(e) return None
def send_captcha_requests(session, urlmapping_obj, params=None, data=None, **kwargs): """ xml data example: <HashMap> <result_message>验证码校验失败,信息为空</result_message> <result_code>8</result_code> </HashMap> format result data. """ session.headers.update(urlmapping_obj.headers) try: response = session.request( method=urlmapping_obj.method, url=urlmapping_obj.url, params=params, data=data, timeout=10, # allow_redirects=False, **kwargs) except requests.RequestException as e: Log.w(e) Log.w("请求{0}异常 ".format(urlmapping_obj.url)) raise ResponseError Log.d(urlmapping_obj.url) if response.status_code == requests.codes.ok: if 'xhtml+xml' in response.headers['Content-Type']: data = response.text root = ET.fromstring(data) message = root.find('result_message').text code = root.find('result_code').text return {"result_message": message, "result_code": code} elif 'json' in response.headers['Content-Type']: return response.json() else: Log.w(response.url) Log.w(response.status_code) raise ResponseError else: Log.w(response.url) Log.w(response.status_code) raise ResponseCodeError
def send_requests(session, urlmapping_obj, params=None, data=None, **kwargs): session.headers.update(urlmapping_obj.headers) if urlmapping_obj.method.lower() == 'post': session.headers.update({ "Content-Type": r'application/x-www-form-urlencoded; charset=UTF-8' }) else: session.headers.pop("Content-Type", None) if urlmapping_obj.type.lower( ) == 'cdn' and CdnStorage.status and CdnStorage.result: # use cdn to check ticket cdn_ip = CdnStorage.choose_one().ip urlmapping_obj.url = urlmapping_obj.url.replace( parse_url(urlmapping_obj.url).host, cdn_ip) Log.v("当前正在使用CDN IP 为{0}".format(cdn_ip)) try: Log.d("请求 url {url}".format(url=urlmapping_obj.url)) try: if urlmapping_obj.type.lower() == 'cdn': # only query data disable warning urllib3.disable_warnings( urllib3.exceptions.InsecureRequestWarning) response = session.request( method=urlmapping_obj.method, url=urlmapping_obj.url, params=params, data=data, timeout=10, # allow_redirects=False, verify=False, **kwargs) else: response = session.request(method=urlmapping_obj.method, url=urlmapping_obj.url, params=params, data=data, timeout=10, **kwargs) except requests.RequestException as e: Log.w(e) Log.w("请求{0}异常 ".format(urlmapping_obj.url)) raise ResponseError if params: Log.d("{url} Get 参数 {data}".format(url=urlmapping_obj.url, data=params)) if data: Log.d("{url} Post 参数 {data}".format(url=urlmapping_obj.url, data=data)) Log.d("返回response url {url}".format(url=response.url)) if response.status_code == requests.codes.ok: if 'xhtml+xml' in response.headers['Content-Type']: data = response.text root = ET.fromstring(data) result = {v.tag: v.text for v in root.getchildren()} return result if 'json' in response.headers['Content-Type']: result = response.json() Log.d("{url} 返回值 {result}".format(url=urlmapping_obj.url, result=result)) return result # other type return response.text else: Log.w(response.url) Log.w(response.status_code) Log.w("返回状态码有问题") except Exception as e: Log.e(e) return None