无法使用Node请求模块读取Linux上的LinkedIn内容



我正在使用Node请求模块来读取站点内容。当我在Linux上使用Node时,我没有得到linkedin.com的完整内容,但它在Windows&Mac OS X.

我已经写了以下代码:

var request = require('request')
request('https://www.linkedin.com/pulse/social-media-why-its-essential-tool-oliver-bussmann', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
} else {
// always return this response  
console.log(response.statusCode,body)
});

我得到了一个999状态代码和以下HTML内容:

\n\nwindow.onload=function}\n\n//获取重定向url的协议。\n var protocol="http:";\n if(window.location.procol="https:"){\n protocol="https:";\n}else{\n//如果设置了"sl"cookie,则重定向到https。\n for(var i=0;i<cookies.length;++i){n if((cookies[i].indexOf("sl=")==0)&&(cookies[i].length>3))n}\n}\n//获取新域。对于touch.www.linkedin.com或tablet.www.linkedin.com/,我们去掉"touch."one_answers"tablet."。对于国际域名,如http://fr.linkediin.com,我们将其转换为www.linkedin.com/var domain=location.host;\n if(domain.substr(0,6)=="touch."){\n domain=domain.subsr(6);\n}else if+\n encodeURIComponent(protocol+"//"+domain+\n window.location.href.substr(window.location.htmr.search(window.location.host))+\n window.location.host.length);\n} \n\n\n

我做错了什么?

当我试图在Mac OS X机器上使用Node.js程序访问LinkedIn个人资料时,也遇到了同样的问题。以下是带有缩进的代码,以便更好地理解:

window.onload = function() {
// Parse the tracking code from cookies.
var trk = "sentinel_org_block";
var cookies = document.cookie.split("; ");
for (var i = 0; i < cookies.length; ++i) {
if ((cookies[i].indexOf("trkCode=") == 0) && (cookies[i].length > 8)) {
trk = cookies[i].substring(8);  
} 
}
// Get the protocol for the redirect url.
var protocol = "http:";
if (window.location.protocol == "https:") { 
protocol = "https:"; 
} else {
// If "sl" cookie is set, redirect to https.
for (var i = 0; i < cookies.length; ++i) {
if ((cookies[i].indexOf("sl=") == 0) && (cookies[i].length > 3)) {
window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);
return;
}
}
}
// Get the new domain. For touch.www.linkedin.com or tablet.www.linkedin.com 
// we strip "touch." and "tablet.". For international domains such as 
// fr.linkedin.com, we convert it to www.linkedin.com
var domain = location.host;
if (domain.substr(0, 6) == "touch.") {
domain = domain.substr(6);
} else if (domain.substr(0, 7) == "tablet.") {
domain = domain.substr(7);
} else if (domain.charAt(2) == ".") {
domain = "www" + domain.substr(2);
}
window.location.href = "https://" + domain + "/uas/login?trk=" + trk + "&session_redirect=" + encodeURIComponent(protocol + "//" + domain + window.location.href.substr(window.location.href.search(window.location.host) + window.location.host.length));
}

它似乎是一个脚本,用于阻止来自自动程序的连接,并在登录页面上重定向用户。它搜索存储在cookie中的一个名为"sl"的变量。如果你得到了它,重定向到正确的网页。但如果你不这样做,脚本将不允许你查看此页面,并将你重定向到LinkedIn登录页面。所以这是我从这段代码中可以理解的,但不幸的是,我未能解决这个问题。。。

编辑:我已经能够通过使用PhantomJS访问页面来解决我的问题。这样你就可以修改你的用户代理,这样领英就不会阻止你的连接。这是我使用的代码:

var phantom = require('phantom');
var sitepage = null;
var phInstance = null;
phantom
.create()
.then(function(instance) {
phInstance = instance;
return instance.createPage();
})
.then(function(page) {
sitepage = page;
page.setting('userAgent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36');
return page.open(this.url);
})
.then(function(status) {
console.log(status)
return sitepage.property('content');
})
.then(function (body) {
console.log(body);
sitepage.close();
phInstance.exit();
})
.catch(function(err) {
console.log(err);
phInstance.exit();
});

相关内容

  • 没有找到相关文章

最新更新