Beispiel #1
0
 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
Beispiel #2
0
 def filter_by_config(self):
     status = self.query()
     if not status:
         Log.e("未能获取乘客信息, 请重试")
     PassengerData.raw_data = self.passengers
     PassengerData.get_final_data()
     data = PassengerData.find_people_by_names(Config.basic_config.ticket_people_list)
     if len(data) == 0:
         Log.e("乘客信息未在账号中找到, 请检查")
         return False
     if len(data) != len(Config.basic_config.ticket_people_list):
         Log.w("乘客信息配置中包含错误, 已经滤除错误乘客")
     self.config_passengers = data
     return True
Beispiel #3
0
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
Beispiel #4
0
 def _get_submit_token(self):
     html = send_requests(LOGIN_SESSION, self.URLS['getExtraInfo'])
     Log.v("获取token中....")
     result = re.findall(r"var globalRepeatSubmitToken = '(.*)'", html)
     ticket_passenger_info = re.findall(r'var ticketInfoForPassengerForm=(.*);', html)
     if result:
         self.token = result[0]
     if ticket_passenger_info:
         try:
             self.ticket_passenger_info = json.loads(ticket_passenger_info[0].replace("'", "\""))
         except TypeError:
             Log.w("获取submit info失败")
             return False
     if self.token and self.ticket_passenger_info:
         Log.v("成功获取token与以及车次信息")
         return True
     else:
         return False
Beispiel #5
0
 def raw_data(self):
     count = 10
     while count:
         try:
             r = requests.get(STATION_URL)
             if r.status_code == requests.codes.ok:
                 raw_data = city_re.findall(r.text)
                 if raw_data:
                     # remove empty line data.
                     data = map(lambda x: x.strip(), raw_data[0].split("@"))
                     Log.v("获取车站信息成功")
                     return list(filter(lambda x: bool(x), data))
             else:
                 count -= 1
                 Log.w("无法读取车站信息,重试中")
                 continue
         except requests.RequestException:
             count -= 1
             Log.w("获取车站信息失败,重试获取中")
             continue
     if count <= 0:
         raise ResponseError
Beispiel #6
0
def get_captcha_image(session,
                      urlmapping_obj,
                      params=None,
                      data=None,
                      **kwargs):
    """
    xml data example:
        <HashMap>
            <result_message>生成验证码成功</result_message>
            <result_code>0</result_code>
            <image>imagedata<image>
        </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
    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
            image = root.find('image').text
            return {"result_message": message, "code": code, 'image': image}
        elif 'json' in response.headers['Content-Type']:
            return response.json()
        else:
            Log.w(response.url)
            Log.w(response.status_code)
            raise ResponseCodeError
    else:
        Log.w(response.url)
        Log.w(response.status_code)
        raise ResponseCodeError
Beispiel #7
0
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