首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab - URLREAD2 -用户代理和烹饪

Matlab - URLREAD2 -用户代理和烹饪
EN

Stack Overflow用户
提问于 2016-01-16 12:18:25
回答 1查看 1.1K关注 0票数 9

我不知道如何让这个示例代码工作,我希望有人能够回顾和评估我的假设,知道什么是错的。

Problem:我想使用Matlab访问受登录屏幕保护的网页。我可以使用wget,它工作得很好,但是我们知道,wget不加载嵌入在页面中的ajax/javascript等。因此,我转而使用Matlab提供的urlread2函数。此后,所有的例子都是基于这个函数的。

示例

我试图登录到一个金融网站,但在测试与其他网站,我得到同样的错误。因此,在我的示例中,我将使用fitbit.com。为了模拟浏览器的行为,我将以下合并的头传递到urlread2中(我已经拆分了代码,以便更容易地查看我正在做的事情):

代码语言:javascript
复制
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];

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

代码语言:javascript
复制
queryString = 'email=myemail&password=mypassword&login=Log+In';  

最后,将urlread2函数的所有内容组合在一起:

代码语言:javascript
复制
[output,extras] = urlread2('https://www.fitbit.com/login','post',queryString,combined_header);

以下响应嵌入到HTML中:

代码语言:javascript
复制
'The owner of this website (www.fitbit.com) has banned your access based on your browser''s signature (2659bb18cf10354e-ua21).'

可能出现的问题1

这很可能是因为我传递的标题不正确,但是当我通过FireFox模拟标题时,页面工作正常。如对此有任何建议,将不胜感激。

可能出现的问题2

我认为问题可能在于cookies,因为urlread2 (或Matlab中的任何其他函数)都支持cookies。如果是这样的话,有没有人对如何解决这个问题有任何建议呢?

EN

回答 1

Stack Overflow用户

发布于 2016-02-16 21:59:07

问题不是你的用户代理。我可以通过尝试一些本应起作用的用户代理值来验证这一点。相反,问题在于您所描述的问题2,换句话说,CloudFlare要求您的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正在使用的cookies,请将View添加到Firefox中。根据我的统计,登录页面设置了36个cookie,而我的猜测是,如果您至少遗漏了其中的一些,那么您将被禁止进入。您可以做的一件事是从浏览器中获取cookie值,并使用名称/值对手动将它们添加到HTTP头中,但是最好让网站在PHP脚本中设置cookie。这里有一个堆栈溢出帖子,描述了如何工作:How can I scrape website content in PHP from a website that requires a cookie login?不容易,但肯定不是不可能的。如果你还需要帮助,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34826841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档