抓取:来自浏览器的会话 ID 有效,但来自抓取的会话 ID 无效
Scraping: session ID from browser works, but session ID from scraping doesn't
注意:出于显而易见的原因,我已将会话 ID 的最后 5 个字符替换为“x”
我正在抓取一个网站。我可以在浏览器中看到,登录设置了一个名为 PHPSESSID
的 cookie 值。没问题,我可以抓取:
superagent
.post(loginUrl)
.send(loginDetails)
.end(function(err, res){
var setCookieValue = res.headers['set-cookie'][0]
var sessionID = cookieParser.parse(setCookieValue).PHPSESSID
console.log(sessionID)
Returns:
37c3bog3tf6erp2i6ss5vxxxxx
这看起来像一个 PHP 会话 ID。伟大的!现在使用会话 ID:
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID'=sessionID)
.end(err, res)
将我重定向到登录页面。但是 我从浏览器手动获取的会话 ID,格式完全相同,工作正常:
var fakeSessionID = 'a1oslk341uoht8p6009q5xxxxx'
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID='+fakeSessionID)
将 return 已登录用户的完整 HTML loggedInURL。
为什么我抓取的会话 ID 不起作用?
- 格式相同
- 字符数相同(26 个字符)
除了会话 ID 之外,工作代码和非工作代码之间没有任何不同。
有什么不同?
您可以尝试在 GET 和 POST 的超级代理调用中的 header 中抛出不同的 user-agent 属性:
.set('User-Agent','Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0')
您的代码看起来没有用实际的 sessionID 值替换字符串 "sessionID"...
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID=sessionID')
.end(err, res)
应该是这样的吧?
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID='+sessionID)
.end(err, res)
我觉得...
PHP 有一些 dubious extra security for sessions such as checking Referer
.
一些网站可能另外check User-Agent
。
注意:出于显而易见的原因,我已将会话 ID 的最后 5 个字符替换为“x”
我正在抓取一个网站。我可以在浏览器中看到,登录设置了一个名为 PHPSESSID
的 cookie 值。没问题,我可以抓取:
superagent
.post(loginUrl)
.send(loginDetails)
.end(function(err, res){
var setCookieValue = res.headers['set-cookie'][0]
var sessionID = cookieParser.parse(setCookieValue).PHPSESSID
console.log(sessionID)
Returns:
37c3bog3tf6erp2i6ss5vxxxxx
这看起来像一个 PHP 会话 ID。伟大的!现在使用会话 ID:
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID'=sessionID)
.end(err, res)
将我重定向到登录页面。但是 我从浏览器手动获取的会话 ID,格式完全相同,工作正常:
var fakeSessionID = 'a1oslk341uoht8p6009q5xxxxx'
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID='+fakeSessionID)
将 return 已登录用户的完整 HTML loggedInURL。
为什么我抓取的会话 ID 不起作用?
- 格式相同
- 字符数相同(26 个字符)
除了会话 ID 之外,工作代码和非工作代码之间没有任何不同。
有什么不同?
您可以尝试在 GET 和 POST 的超级代理调用中的 header 中抛出不同的 user-agent 属性:
.set('User-Agent','Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0')
您的代码看起来没有用实际的 sessionID 值替换字符串 "sessionID"...
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID=sessionID')
.end(err, res)
应该是这样的吧?
superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID='+sessionID)
.end(err, res)
我觉得...
PHP 有一些 dubious extra security for sessions such as checking Referer
.
一些网站可能另外check User-Agent
。