Dan*_*Dan 9 cookies matlab cloudflare
我对如何使这个示例代码工作感到茫然,我希望有人能够审查并评估我对错误的假设.
问题:我想使用Matlab访问受登录屏幕保护的网页.我能够使用wget并且它工作正常,但是正如我们所知,wget不会加载嵌入在页面中的ajax/javascript等.因此,我转向使用urlread2Matlab文件交换中提供的功能.此后,所有示例都基于此功能.
示例:
我正在尝试登录金融网站,但是在与其他网站测试时,我得到了同样的错误.因此,对于我的例子,我将使用fitbit.com.为了模仿浏览器的行为,我将以下组合标题传递给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];
Run Code Online (Sandbox Code Playgroud)
在定义了头信息后,我生成了所需的查询字符串(这是用于post操作):
queryString = 'email=myemail&password=mypassword&login=Log+In';
Run Code Online (Sandbox Code Playgroud)
最后,将所有urlread2功能集中在一起:
[output,extras] = urlread2('https://www.fitbit.com/login','post',queryString,combined_header);
Run Code Online (Sandbox Code Playgroud)
以下响应嵌入在HTML中:
'The owner of this website (www.fitbit.com) has banned your access based on your browser''s signature (2659bb18cf10354e-ua21).'
Run Code Online (Sandbox Code Playgroud)
可能的问题1:
可能是我错误地传入了标题,但是当我通过FireFox模仿标题时,页面正常工作.对此有任何建议将不胜感激.
可能的问题2:
我认为问题可能归结为cookie,其中urlread2(或Matlab中的任何其他功能)都不支持cookie.如果是这种情况,有没有人有任何关于如何解决这个问题的建议?
小智 1
问题不在于您的用户代理。我能够通过尝试一些应该有效的用户代理值来验证这一点。相反,问题就是您所描述的问题 2。换句话说,CloudFlare 要求您的 HTTP 标头包含有效的 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 标头中,但最好让网站在 PHP 脚本中设置您的 cookie。这里有一篇 Stack Overflow 帖子,描述了它的工作原理:How can I scrape website content in PHP from a website that require a cookie login? 不容易,但绝对不是不可能。如果您需要更多帮助,请告诉我。
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |