我正在对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
?
答案 0 :(得分:1)
我想你可以试试:
eval('<code>')
; 我建议使用以下代码覆盖XMLHttpRequest
。setRequestHeader
功能以获取令牌:
// 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')将包含令牌的值,假设代码的评估在与来电者。