刮取:来自浏览器的会话ID工作,但刮取的会话ID不起作用

时间:2015-06-21 22:06:10

标签: javascript php node.js screen-scraping session-cookies

注意:由于显而易见的原因,我已将会话ID的最后5个字符替换为“x”

我在抓一个网站。我可以在浏览器中看到,登录设置了一个名为MyClass的cookie值。没问题,我可以抓一点:

PHPSESSID

返回:

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)

它看起来像一个PHP会话ID。大!现在使用会话ID:

37c3bog3tf6erp2i6ss5vxxxxx

将我重定向到登录页面。但我从浏览器手动获取的会话ID,格式完全相同,工作正常

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

将使用登录用户的完整HTML返回loggedInURL。

为什么我正在抓取会话ID?

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

会话ID中没有任何内容在工作代码和非工作代码之间有所不同。

可能有什么不同?

3 个答案:

答案 0 :(得分:2)

PHP有一些dubious extra security for sessions,例如checking Referer

某些网站可能还有check User-Agent

答案 1 :(得分:1)

您可以尝试在对GET和POST的superagent调用的标题中抛出不同的user-agent属性:

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

答案 2 :(得分:0)

您的代码看起来好像没有用实际的sessionID值替换字符串“sessionID”...

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/additional-methods.min.js"></script>
<form id="test">
  <input type="text" name="alphanumdash" /><br/>
  <input type="submit" />
</form>

应该是这样的吗?

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

我想......