访问HTML文件中的Javascript变量

时间:2016-01-01 00:27:31

标签: javascript

我正在对Gmail中的Rapportive API进行一些逆向工程。

我提出此请求

import requests
url ='https://api.linkedin.com/uas/js/xdrpc.html'
r = requests.get(url)
print r.text

响应是一个空的HTML文件,里面有很多Javascript。在第3661行,它为后续调用Rapportive设置RequestHeader:

ak.setRequestHeader("oauth_token", ae);

有没有办法可以请求该页面然后返回ae

2 个答案:

答案 0 :(得分:1)

我想你可以试试:

  1. 像往常一样获取页面;
  2. 从响应页面中删除所有非JavaScript元素;
  3. 在页面的javascript中添加javascript(如下所述)以覆盖某些代码;
  4. 使用eval('<code>');
  5. 执行
  6. 检查令牌是否设置正确;
  7. 我建议使用以下代码覆盖XMLHttpRequestsetRequestHeader功能以获取令牌:

    // this will keep the token
    var headerToken; 
    
    // create a backup method
    XMLHttpRequest.prototype.setRequestHeaderBkp = 
    XMLHttpRequest.prototype.setRequestHeader; 
    
    // override the "setRequestHeader" method
    XMLHttpRequest.prototype.setRequestHeader = function(key, val)
    {
      if ('oauth_token' === key)
        headerToken = val;
    
      this.setRequestHeaderBkp(key, val);
    }
    

答案 1 :(得分:0)

如果您只是对检索令牌感兴趣,则不能只进行正则表达式匹配:

var str = '<script>var a = 1;...ak.setRequestHeader("oauth_token", ae);...</script>';
var token = str.match(/setRequestHeader\("oauth_token",\s*([^)]+)/)[1];

虽然这假设ae是实际的字符串值。如果它是一个变量,这种方法就不会那么容易了。

编辑:如果它是变量,你可以做类似的事情:

str.replace(/\w+\.setRequestHeader\([^,]+,\s*([^)]+)\s*\);/, 'oauthToken = \1';

在运行从页面返回的JavaScript之前,全局oauthToken(注意缺少的'var')将包含令牌的值,假设代码的评估在与来电者。