自动登陆网站

以美国adidas官网为例,思路就是模拟用户操作的登陆请求。下面摘取部分主要代码(Java)。

登陆函数
private ExecResult<Document> signin(String email, String password) {
        // sign in and get cookie
        try {
            Elements inputElements = doc.select(".auth-validate-form input");
            List<NameValuePair> params = AdidasUtils.fillParamsWithInputElements(inputElements);
            if (params == null || params.size() <= 0) {
                inputElements = doc.select(".auth-pagelet-container form input");
                params = AdidasUtils.fillParamsWithInputElements(inputElements);
            }
            params = AdidasUtils.fillLoginParams(email, password, params);
            AdidasUtils.getHttpPostResponseWithDocument(AdidasConstants.SIGNIN_URL, doc.location(), params, httpsClient);
        } catch (Exception e) {
            LogUtils.info(AdidasConstants.ERROR_PREFIX + e.toString());
        }
        return createResult(true, doc, null);
    }
    public static List<NameValuePair> fillParamsWithInputElements(Elements inputElements) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        LogUtils.info("Params size: " + inputElements.size());
        for (Element inputElement : inputElements) {
            if (!StringUtils.isBlank(inputElement.attr("name"))) {
                if (!StringUtils.isBlank(inputElement.attr("type")) &&
                        "radio".equalsIgnoreCase(inputElement.attr("type")) &&
                        !inputElement.hasAttr("checked")) {
                    continue;
                }
                params.add(new BasicNameValuePair(inputElement.attr("name"), inputElement.val()));
            }
        }
        return params;
    }
设置登陆参数
public static List<NameValuePair> fillLoginParams(String email, String password, List<NameValuePair> params) {
        List<NameValuePair> filteredList = filterOutInputValues(AdidasConstants.LOGIN_BLACK_KEYS, params);
        filteredList.add(new BasicNameValuePair("username", email));
        filteredList.add(new BasicNameValuePair("password", password));
        filteredList.add(new BasicNameValuePair("remembermeParam", "true"));
        filteredList.add(new BasicNameValuePair("signinSubmit", "Sign in"));
        return filteredList;
    }
发送请求
    public static Document getHttpPostResponseWithDocument(String url, String referrer, List<NameValuePair> params,DecompressingHttpClient httpClient) throws IOException {
        response = getHttpPostResponse(url, referrer, params, httpClient);
        Document doc = Jsoup.parse(EntityUtils.toString(response.getEntity(), "UTF-8"));
        EntityUtils.consume(response.getEntity());
        return doc;
    }

public static HttpResponse getHttpPostResponse(String url, String referrer, List<NameValuePair> params, DecompressingHttpClient httpClient) throws IOException {
        HttpPost post = new HttpPost(url);
        setHeaders(post);
        if (!StringUtils.isBlank(referrer)) {
            post.setHeader("Referer", referrer);
        }
        if (params != null) {
            post.setEntity(new UrlEncodedFormEntity(params));
            for (NameValuePair pair : params) {
                print(pair.getName() + "=" + pair.getValue());
            }
        }
        return httpClient.execute(post);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值