cURL获得了与Chrome浏览器不同的页面源

zfycwa2u  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(116)

简而言之:我试图在Bash中使用curl获取https://www.etoro.com/app/sv-iframe的页面源代码。
我知道这个要求很“简单”。我在这里读了10+个类似的问题。不幸的是,他们中没有一个能解决我的问题。
当你在Chrome浏览器中打开上面的URL时,它是空白的。您可以右键单击->查看页面源,或使用Chrome开发人员工具嗅探网络。这两种方法都可以为您提供正确的页面来源。该页面包含javascript,其中有一个很长的十六进制字符串-我最终需要的。我试着禁用JavaScript并重新加载页面。我还是找到了正确的页面来源。所以JavaScript在这里不会耍花招。听起来通过curl获取这样的页面源应该是很简单的,对吧?
当我在Chrome开发工具中右键单击请求-> Copy as cURL,并在终端中执行它时,事情变得很糟糕-我得到了一个CloudFlare security check page。我在Chrome Incognito模式下多次重新打开页面。我发誓我从来没有在浏览器中看到过CloudFlare安全检查。我仔细检查了cURL命令。它还设置了用户代理。
以下是我到目前为止所尝试的:

  • 从Chrome Developer Tool手动编写curl命令并填充标题
  • 嗅探Android设备上的包,并使用移动的浏览器上设置的头
  • 从Postman Web在线发布请求

所有人都给了我相同的CloudFlare安全检查页面。
CloudFlare页面显示“请启用cookie”。我怀疑如果服务器以这种方式确定我不是从浏览器调用。在一些线程之后,我尝试使用curl设置-B/-c/-j标志。也没有运气。
以下是我所做的更详细的步骤:
1.打开Chrome隐身模式
1.开放式开发工具
1.使用Command+Shift+P(Mac)打开命令菜单
1.键入“禁用JavaScript”并按Enter键
1.切换到网络选项卡
1.打开https://www.etoro.com/app/sv-iframe
1.观察请求列表-应该只有1个请求(request screenshot 1/request screenshot 2/response body/response cookie
1.右键单击请求-> Copy as cURL
下面是我的curl命令:

curl 'https://www.etoro.com/app/sv-iframe' \
  -H 'authority: www.etoro.com' \
  -H 'pragma: no-cache' \
  -H 'cache-control: no-cache' \
  -H 'sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'upgrade-insecure-requests: 1' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36' \
  -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
  -H 'sec-fetch-site: none' \
  -H 'sec-fetch-mode: navigate' \
  -H 'sec-fetch-user: ?1' \
  -H 'sec-fetch-dest: document' \
  -H 'accept-language: en-US,en;q=0.9' \
  --compressed

请求本身我不认为它需要cookie,因为页面可以在隐身模式下打开。无论如何,我试图将响应cookie与请求一起设置。也没有用。

-H 'cookie: __cfduid=d2edf...; TS01047baf=01d53...; __cf_bm=a3803...; __cflb=02Di3...'

已经花了一整晚的时间,但还是没有解决。我很感激任何建议或帮助我通过它。我有一种感觉,实际的解决办法会相当简单。请求没有cookie。唯一需要更新的是标题。也许我没有指定正确的头?或者一些额外的 curl 标志会有帮助?

cgfeq70w

cgfeq70w1#

该页面上有一些混淆的js eval代码,基本上是设置cookie或发送日志,深入挖掘一下,这是最终的结果:

(function() {
    var s = '9a7xxx......';

    function setCookie(cname, cvalue, domain, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays * 1000 * 60 * 60 * 24));
        var expires = "expires=" + d.toUTCString();
        var cookie = cname + "=" + cvalue;
        if (domain) {
            cookie += ";" + "domain=" + domain;
        }
        cookie += ";" + expires + ";path=/";
        document.cookie = cookie;
    }

    function deleteCookie(cname, domain) {
        setCookie(cname, "", domain, 0);
    }
    var ta = ["window.callPhantom", "window.__nightmare", "window._phantom", "window.__webdriver_script_fn", "navigator.webdriver", "document.$cdc_asdjflasutopfhvcZLmcfl_"];
    var re;
    try {
        re = [!!window.callPhantom, !!window.__nightmare, !!window._phantom, !!window.__webdriver_script_fn, !!navigator.webdriver, !!document.$cdc_asdjflasutopfhvcZLmcfl_];
    } catch (err) {}
    if (re && re.indexOf(true) == -1) {
        setCookie("TMIS2", s, ".etoro.com", 14);
    } else {
        var resultsObj = {};
        for (var i = 0; i < ta.length; i++) {
            resultsObj[ta[i]] = re[i];
        }
        var img = new Image();
        img.src = 'https://etorologsapi.etoro.com/api/v2/monitoring?applicationIdentifier=JSCClient&LogEvents=' + encodeURIComponent(JSON.stringify([{
            ApplicationIdentifier: 'JSCClient',
            ApplicationVersion: '0.0.11',
            Level: "error",
            Message: "ClientSel",
            Results: resultsObj,
            Type: 'log'
        }]));
    }
 })();
yvfmudvl

yvfmudvl2#

你可以尝试https://github.com/lwthiker/curl-impersonate/tree/v0.5.4我从https://www.etoro.com/app/sv-iframe中通过curl-impersonate得到的东西:

<!DOCTYPE html><html><head><title>Title</title></head><body><script>(function(){var js = "window['__CF$cv$params']={r:'7f0f24acce60352f'};_cpo=document.createElement('script');_cpo.nonce='',_cpo.src='/cdn-cgi/challenge-platform/scripts/invisible.js',document.getElementsByTagName('head')[0].appendChild(_cpo);";var _0xh = document.createElement('iframe');_0xh.height = 1;_0xh.width = 1;_0xh.style.position = 'absolute';_0xh.style.top = 0;_0xh.style.left = 0;_0xh.style.border = 'none';_0xh.style.visibility = 'hidden';document.body.appendChild(_0xh);function handler() {var _0xi = _0xh.contentDocument || _0xh.contentWindow.document;if (_0xi) {var _0xj = _0xi.createElement('script');_0xj.innerHTML = js;_0xi.getElementsByTagName('head')[0].appendChild(_0xj);}}if (document.readyState !== 'loading') {handler();} else if (window.addEventListener) {document.addEventListener('DOMContentLoaded', handler);} else {var prev = document.onreadystatechange || function () {};document.onreadystatechange = function (e) {prev(e);if (document.readyState !== 'loading') {document.onreadystatechange = prev;handler();}};}})();</script></body></html>

相关问题