Пример #1
0
def get_qrcode_info(request):
    """
    获取二维码相关信息
    :param request:
    :return:
    """
    ret_data = {}
    try:
        qrurl = "https://qrlogin.taobao.com/qrcodelogin/generateQRCode4Login.do"
        res = get_response_by_requests(qrurl, headers=DEFAULT_HEADERS).json()
        if res.get("success"):
            url = res.get("url", "")
            qrcode_url = "https:" + url if not url.startswith("http") else url
            qrcode_body = get_response_by_requests(
                qrcode_url, headers=DEFAULT_HEADERS).content
            qrcode_info = {
                "lgToken": res.get("lgToken", ""),
                "adToken": res.get("adToken", ""),
                "qrcode_url": qrcode_url,
                "qrcode_body": bytes.decode(b64encode(qrcode_body))
            }
            ret_data["msg"] = "获取二维码相关信息成功"
            ret_data["data"] = qrcode_info
        else:
            add_ajax_error_json(ret_data, "获取二维码相关信息失败")
    except Exception:
        add_ajax_error_json(ret_data, "获取二维码相关信息出错")
    else:
        add_ajax_ok_json(ret_data)
    finally:
        return JsonResponse(ret_data)
Пример #2
0
    def http_request(self, url, method="GET", data=None, headers=None, cookies=None,
                     to_json=False, get_str=True, charset="utf-8", get_cookies=False):
        """
        封装HTTP请求
        :param url:
        :param data:
        :param method:
        :param headers:
        :param cookies:
        :param to_json:
        :param get_str:
        :param charset:
        :param get_cookies:
        :return:
        """
        try:
            cookies_dic = {}
            if headers is None:
                headers = self.headers or {}
            if cookies is None:
                cookies = self.cookies or {}
            if isinstance(cookies, list):
                cookies = {cookie["name"]: cookie["value"] for cookie in cookies}

            if method == "GET":
                if get_cookies:
                    resp = get_response_by_requests(url, headers=headers, cookie_jar=cookies)
                    cookies_dic = resp.cookies.get_dict()
                    content = resp.content
                else:
                    content = get_content_by_requests(url, headers=headers, cookie_jar=cookies)
            elif method == "POST":
                if get_cookies:
                    resp = get_response_by_requests_post(url, headers=headers, cookie_jar=cookies)
                    cookies_dic = resp.cookies.get_dict()
                    content = resp.content
                else:
                    content = get_content_by_requests_post(url, data=data, headers=headers, cookie_jar=cookies)
            else:
                self.logger.error("暂不支持该请求方法")
                return

            if not get_str:
                if get_cookies:
                    return {"result": content, "cookies": cookies_dic}
                return content
            page = content.decode(charset)

            if not to_json:
                if get_cookies:
                    return {"result": page, "cookies": cookies_dic}
                return page

            if get_cookies:
                return {"result": json_loads(page), "cookies": cookies_dic}

            return json_loads(page)
        except Exception:
            self.logger.exception("请求出错: url:%s" % url)
            return
Пример #3
0
    def __get_qr(self):
        index_url = 'https://mail.qq.com/cgi-bin/loginpage'
        index_r = get_response_by_requests(index_url, self.headers)
        index_text = index_r.text
        iframe_url = Selector(
            text=index_text).xpath("//iframe/@src").extract_first("")
        iframe_r = get_response_by_requests(iframe_url, self.headers)
        cookies = iframe_r.cookies.get_dict()
        appid = self.appid_pattern.search(iframe_url).group(1)
        daid = self.daid_pattern.search(iframe_url).group(1)
        qr_url = "https://ssl.ptlogin2.qq.com/ptqrshow?" \
                 "appid={0}&e=2&l=M&s=3&d=72&v=4&t={1}&" \
                 "daid={2}&pt_3rd_aid=0".format(appid, random(), daid)

        qr = http_get(qr_url, self.headers, cookies=cookies)
        cookies.update(qr.cookies.get_dict())
        return qr.content, cookies, appid, daid
Пример #4
0
def ask_qrcode_status(request):
    """
    获取扫描二维码状态
    :param request:
    :return:
    """
    ret_data = {}
    succ = False
    need_refresh = False
    try:
        args = request.POST
        username = args["username"]
        account_type = args["account_type"]
        lg_token = args.get("lg_token", "")
        check_url_base = "https://qrlogin.taobao.com/qrcodelogin/qrcodeLoginCheck.do?" \
                         "lgToken={lgToken}&defaulturl=https%3A%2F%2Fwww.taobao.com%2F"
        check_url = check_url_base.format(lgToken=lg_token)
        res_json = get_response_by_requests(check_url,
                                            headers=DEFAULT_HEADERS).json()

        session = req_session()
        msg = "通过扫描二维码登录失败"
        code = res_json.get("code")
        if code == "10000":
            msg = "请先扫描二维码"
        elif code == "10001":
            msg = "扫描成功后,请确认登录"
            succ = True
        elif code == "10004":
            msg = "二维码已失效,请重试"
            need_refresh = True
        elif code == "10006":
            redirect_url = res_json.get("url")
            resp = session.get(redirect_url,
                               headers=DEFAULT_HEADERS,
                               verify=False)
            if resp.status_code == 200:
                msg = "登录成功"
                cookies = session.cookies.get_dict(domain='.taobao.com')
                cookies_str = json_dumps(cookies)
                # 将登录成功的cookies信息存入ssdb,供爬虫端使用
                ssdb_connect = get_ssdb_conn()
                key = username + ACCOUNT_CRAWLING_QRCODE_COOKIES_SSDB_SUFFIX + account_type
                ssdb_connect.setx(key, cookies_str, DATA_EXPIRE_TIME)
                succ = True
        else:
            msg = res_json.get("msg", "通过扫描二维码登录失败")
    except Exception:
        msg = "获取扫描二维码状态出错"

    if succ:
        add_ajax_ok_json(ret_data)
    else:
        ret_data["need_refresh"] = need_refresh
        add_ajax_error_json(ret_data, msg)

    return JsonResponse(ret_data)
Пример #5
0
 def get_captcha(self, response, username="", cookie_dict=None):
     """
     获取验证码并识别,返回识别的验证码, cookies
     """
     # cookiejar = get_cookiejar_from_response(response)
     headers = get_headers_from_response(response)
     url = "http://uac.10010.com/portal/Service/CreateImage?t=" + get_js_time(
     )
     resp = get_response_by_requests(url,
                                     headers=headers,
                                     cookie_jar=cookie_dict)
     return resp.content, resp.cookies.get_dict()
Пример #6
0
def send_sms_code(request):
    """
    登录发送短信验证码
    :param request:
    :return:
    """
    ret_data = {}
    try:
        args = request.POST
        session = request.session
        if args.get("is_first", False) == "true":
            username = args["username"].strip()
            account_type = args["account_type"]
            key = username + ACCOUNT_CRAWLING_SMS_HEADERS_SSDB_SUFFIX + account_type
            ssdb_conn = get_ssdb_conn()
            headers_data = ssdb_conn.get(key)
            if not headers_data:
                add_ajax_error_json(ret_data, "获取短信验证码失败")
                return JsonResponse(ret_data)

            headers_dict = json_loads(headers_data)
            send_url = headers_dict.get("url", "")
            session["send_url"] = send_url
            session["last_send_time"] = time()

            # 第一次会自动发送,默认为发送成功
            res_json = {"stat": "ok", "info": {"sent": True}}
        else:
            last_send_time = session.get("last_send_time", 0)
            need_sleep_time = max(last_send_time + SMS_SLEEP_TIME + 2 -
                                  time(), 0) if last_send_time else 0
            sleep(need_sleep_time)

            send_url = session.get("send_url")
            res_json = get_response_by_requests(
                send_url, headers=DEFAULT_HEADERS).json()
        if res_json.get("stat") == "ok" and res_json.get("info",
                                                         {}).get("sent"):
            add_ajax_ok_json(ret_data)
        else:
            error_msg = res_json.get("info", {}).get("errorMessage")
            add_ajax_error_json(ret_data, error_msg or "发送短信验证码失败")
    except Exception:
        add_ajax_error_json(ret_data, "发送短信验证码出错")

    return JsonResponse(ret_data)
Пример #7
0
    def get_unisecid_request(self, response):
        cookiejar = get_cookiejar_from_response(response)
        headers = get_headers_from_response(response)
        the_time = get_js_time()

        url = "https://uac.10010.com/oauth2/genqr?" + the_time
        r = get_response_by_requests(url,
                                     headers=headers,
                                     cookie_jar=cookiejar)
        cookie = r.headers.get('Set-Cookie')
        result = {}
        k_v_list = cookie.split(';')
        name, value = k_v_list[0].split('=')
        result['name'] = name
        result['value'] = value
        for k_v in islice(k_v_list, 1, None):
            k, v = k_v.split('=', 1)
            result[k] = v

        return result
Пример #8
0
 def get_need_captcha_response(self, response, username, pwd_type="02"):
     """
     询问是否需要验证码
     """
     cookiejar = get_cookiejar_from_response(response)
     headers = get_headers_from_response(response)
     the_time = get_js_time()
     form_data = {
         'userName':
         username,
         'pwdType':
         pwd_type,
         '_':
         int(the_time) + 1,
         'callback':
         "jQuery1720" + str(randint(1E16, 1E17 - 1)) + "_" + the_time
     }
     url = "http://uac.10010.com/portal/Service/CheckNeedVerify?" + urlencode(
         form_data)
     return get_response_by_requests(url,
                                     headers=headers,
                                     cookie_jar=cookiejar)
Пример #9
0
 def get_ckPwd_request(self, response, username, cookie_dict=None):
     meta = response.meta
     sleep(self._get_sms_send_sleep_time(meta))
     the_time = get_js_time()
     form_data = {
         'mobile':
         username,
         'req_time':
         the_time,
         '_':
         int(the_time) + 1,
         'callback':
         "jQuery1720" + str(randint(1E16, 1E17 - 1)) + "_" + the_time
     }
     # cookiejar = get_cookiejar_from_response(response)
     headers = get_headers_from_response(response)
     url = "https://uac.10010.com/portal/Service/SendCkMSG?" + urlencode(
         form_data)
     resp = get_response_by_requests(url,
                                     headers=headers,
                                     cookie_jar=cookie_dict)
     meta["last_sms_time"] = time()
     text = resp.text
     return ('resultCode:"0000"' in text), text