抓取:浏览器的会话 ID 有效,但抓取的会话 ID 无效

Scraping: session ID from browser works, but session ID from scraping doesn't

本文关键字:抓取 ID 会话 无效 有效 浏览器      更新时间:2023-09-26

注意:出于显而易见的原因,我已将会话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)

返回:

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)

将返回登录的 InURL,其中包含登录用户的完整 HTML。

为什么我正在抓取的会话 ID 不起作用?

  • 格式相同
  • 字符数相同(26 个字符)

除了会话 ID 之外,工作代码和非工作代码之间没有任何不同。

什么能带来不同?

PHP 对会话有一些可疑的额外安全性,例如检查Referer

某些站点可能会另外检查User-Agent

您可以尝试在对 GET 和 POST 的超级代理调用的标头中抛出不同的用户代理属性:

  .set('User-Agent','Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0')

您的代码看起来没有将字符串"sessionID"替换为实际的会话ID值...

superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID=sessionID')
.end(err, res)

应该是这样的?

superagent
.get(loggedInURL)
.set('Cookie', 'PHPSESSID='+sessionID)
.end(err, res)

我认为。。。