简而言之:我试图在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 标志会有帮助?
2条答案
按热度按时间cgfeq70w1#
该页面上有一些混淆的js eval代码,基本上是设置cookie或发送日志,深入挖掘一下,这是最终的结果:
yvfmudvl2#
你可以尝试https://github.com/lwthiker/curl-impersonate/tree/v0.5.4我从https://www.etoro.com/app/sv-iframe中通过curl-impersonate得到的东西: