Matlab - URLREAD2 - 用户代理和 Cookie

标签 matlab cookies cloudflare

我不知道如何让这个示例代码正常工作,我希望有人能够审查和评估我的假设,看看哪里出了问题。

问题:我想使用 Matlab 访问受登录屏幕保护的网页。我能够使用 wget 并且它工作正常,但是正如我们所知,wget 不会加载页面中嵌入的 ajax/javascript 等。因此,我转而使用 Matlab 文件交换中提供的 urlread2 函数。以下所有示例均基于此功能。

示例:

我正在尝试登录一个金融网站,但是在对其他网站进行测试时,我遇到了同样的错误。因此,对于我的示例,我将使用 fitbit.com。为了模仿浏览器的行为,我将以下组合 header 传递到 urlread2(我拆分了代码以便更容易看到我在做什么):

value = 'https://www.fitbit.com';
header = http_createHeader('Host',value);
value = 'keep-alive';
header2 = http_createHeader('Connection',value);
value = '278';
header3 = http_createHeader('Content-Length',value);
value = 'max-age=0';
header4 = http_createHeader('Cache-Control',value);
value =     'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
header5 = http_createHeader('Accept',value);
value = 'https://www.fitbit.com';
header6 = http_createHeader('Origin',value);
value = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36';
header7 = http_createHeader('User-Agent',value);
value = 'application/x-www-form-urlencoded';
header8 = http_createHeader('Content-Type',value);
value = 'https://www.fitbit.com/login';
header9 = http_createHeader('Referer',value);
value = 'gzip, deflate';
header10 = http_createHeader('Accept-Encoding',value);
value = 'en-US,en;q=0.8';
header11 = http_createHeader('Accept-Language',value);
%Generate a combined header as required by urlread2
combined_header = [header header2 header3 header4 header5 header6 header7 header8 header9 header10 header11];

定义了头信息后,我生成了所需的查询字符串(这是用于后期操作):

queryString = 'email=myemail&password=mypassword&login=Log+In';  

最后,将它们放在一起用于 urlread2 函数:

[output,extras] = urlread2('https://www.fitbit.com/login','post',queryString,combined_header);

以下响应嵌入在 HTML 中:

'The owner of this website (www.fitbit.com) has banned your access based on your browser''s signature (2659bb18cf10354e-ua21).'

可能的问题1:

很可能是我错误地传递了 header ,但是当我通过 FireFox 模拟 header 时,页面可以正常工作。对此的任何建议将不胜感激。

可能的问题2:

我认为问题可能出在 cookie 上,urlread2(也不是 Matlab 中的任何其他函数)支持 cookie。如果是这种情况,有人对如何解决这个问题有什么建议吗?

最佳答案

问题不在于您的用户代理。我能够通过尝试一些应该有效的用户代理值来验证这一点。相反,问题是您描述的问题 2。换句话说,CloudFlare 要求您的 HTTP header 包含有效的 cookie 值/名称对。

这是告诉我情况的 urlread2 输出行:

<div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data- translate="enable_cookies">Please enable cookies.</div>

要查看 fitbit.com 使用的 cookie,请将查看 Cookie 插件添加到 Firefox。据我统计,登录页面设置了 36 个 cookie,我猜如果您至少缺少其中一些,您将被禁止进入。您可以做的一件事就是从您的浏览器中获取 cookie 值,然后使用名称/值对将它们手动添加到您的 HTTP header 中,但最好让网站在 PHP 脚本中设置您的 cookie。这是一篇描述其工作原理的 Stack Overflow 帖子:How can I scrape website content in PHP from a website that requires a cookie login?不容易,但绝对不是不可能。如果您需要更多帮助,请告诉我。

关于Matlab - URLREAD2 - 用户代理和 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34826841/

相关文章:

linux - Linux 服务器上的 MATLAB 代码

javascript - 根据cookie值打开iframe

javascript - 如何从 Nuxt 3 服务器访问 httpOnly cookie

laravel - CloudFlare SSL 证书无效

excel - matlab中的趋势线选项(excel)

c - MATLAB 在 DLL 中调用函数时的堆栈限制是多少

cookies - 为什么我的 localhost 项目上会出现 _ga cookie?

nginx - 域名不适用于 nginx 中的某些端口

.htaccess - 需要基于自定义 http header 的重写规则

matlab - 如何为矩阵的每个元素设置不同的显示样式?