简体   繁体   English

Akamai 绕过 (Java)

[英]Akamai Bypass (Java)

I am writing a bot to auto purchase items on a website (zalando).我正在编写一个机器人来在网站(zalando)上自动购买物品。 Everything goes well from login to adding items to shopping cart but at the very end it doesn't work anyomore.从登录到将商品添加到购物车,一切都很顺利,但最后它不再起作用了。 It sends this error: { "edge_error": "halt", "ref_id": "18.57c51102.1663765843.299fc0e", "wait": 60, "feedback": { "email": true, "url": "", "recaptcha": { "enabled": false, "type": 0, "sitekey": "" } }}它发送此错误: { "edge_error": "halt", "ref_id": "18.57c51102.1663765843.299fc0e", "wait": 60, "feedback": { "email": true, "url": "", "recaptcha": { "enabled": false, "type": 0, "sitekey": "" } }}

I think it has something to do with their protection or just me missing a header or cookie or a delay... I honestly have no clue anymore This is the code I use in the end (to checkout and generate a paypal link (post response)):我认为这与他们的保护有关,或者只是我错过了 header 或 cookie 或延迟......老实说,我已经不知道了这是我最后使用的代码(结帐并生成 paypal 链接(回复后) )):

public void makePostJsonRequest(WebDriver driver, String eTag, String checkoutID)
{
    retrieveCookiesMap(driver);
    HttpClient httpClient = new DefaultHttpClient();
    try {
        HttpPost postRequest = new HttpPost("https://www.zalando.be/api/checkout/buy-now");
        postRequest.setHeader("authority", "www.zalando.be");
        postRequest.setHeader("accept", "application/json");
        postRequest.setHeader("accept-language", "en-US,en;q=0.9");
        postRequest.setHeader("content-type", "application/json");
        postRequest.setHeader("cookie", "language-preference=nl;" +
                " Zalando-Client-Id=" + cookiesMap.get("Zalando-Client-Id") + ";" +
                " ncx=f;" +
                " _gcl_au=" + cookiesMap.get("_gcl_au") + ";" +
                " sqt_cap=" + cookiesMap.get("sqt_cap") + ";" +
                " _ga=" + cookiesMap.get("_ga") + ";" +
                " _gid=" + cookiesMap.get("_gid") + ";" +
                " bm_sz=" + cookiesMap.get("bm_sz") + ";" +
                " ak_bms=" + cookiesMap.get("ak_bms") + ";" +
                " _gat_zalga=1;" +
                " mpulseinject=false;" +
                " frsx=" + cookiesMap.get("frsx") + ";" +
                " zsa=" + cookiesMap.get("zsa") + ";" +
                " zsr=" + cookiesMap.get("zsr") + ";" +
                " zsi=" + cookiesMap.get("zsi") + ";" +
                " bm_sv=" + cookiesMap.get("bm_sv") + ";" +
                " _abck=" + cookiesMap.get("_abck") + ";");
        postRequest.setHeader("origin", "https://www.zalando.be");
        postRequest.setHeader("referer", "https://www.zalando.be/checkout/confirm");
        postRequest.setHeader("sec-ch-ua", "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"");
        postRequest.setHeader("sec-ch-ua-mobile", "?0");
        postRequest.setHeader("sec-ch-ua-platform", "\"Linux\"");
        postRequest.setHeader("sec-fetch-dest", "empty");
        postRequest.setHeader("sec-fetch-mode", "cors");
        postRequest.setHeader("sec-fetch-site", "same-origin");
        postRequest.setHeader("user-agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36");
        postRequest.setHeader("x-xsrf-token", cookiesMap.get("frsx"));
        postRequest.setHeader("x-zalando-checkout-app", "web");
        postRequest.setHeader("x-zalando-footer-mode", "desktop");
        postRequest.setHeader("x-zalando-header-mode", "desktop");
        eTag = StringUtils.chop(eTag);
        eTag += "\\";

        String jsonString = "{\"checkoutId\":\"" + checkoutID + "\"," +
                "\"eTag\":" + "\"\\" + eTag + "\"" + "\"" + "}";

        System.out.println(jsonString);

        StringEntity entity = new StringEntity(jsonString);

        postRequest.setEntity(entity);

        long startTime = System.currentTimeMillis();
        HttpResponse response = httpClient.execute(postRequest);
        long elapsedTime = System.currentTimeMillis() - startTime;
        System.out.println("Time taken : "+elapsedTime+"ms");

        InputStream is = response.getEntity().getContent();
        Reader reader = new InputStreamReader(is);
        BufferedReader bufferedReader = new BufferedReader(reader);
        StringBuilder builder = new StringBuilder();
        while (true) {
            try {
                String line = bufferedReader.readLine();
                if (line != null) {
                    builder.append(line);
                } else {
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println(builder.toString());
        System.out.println("****************");
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

This sounds strange, because that kind of akamai check is also used in login process.这听起来很奇怪,因为这种 akamai 检查也用于登录过程。 In fact that response means akamai detected you as bot and this usually happens when you sent a wrong _abck事实上,响应意味着 akamai 将您检测为机器人,这通常发生在您发送错误的 _abck 时

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM