抓取:浏览器的会话 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)
返回:
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)
我认为。。。
相关文章:
- 同源策略目的|用户数据与基本页面数据|客户端页面抓取
- VBA正在抓取不在HTML源文件中的生成内容
- 尝试使用Node.js动态路由从IMDB中抓取电影内容.但是在我的output.json文件中没有定义
- 如何从网站上抓取链接和图片
- 用jquery抓取图像SRC-attr
- Javascript Regex-从价格中抓取分隔符
- 使用网络服务器的IP地址而不是域名对其进行屏幕抓取
- Javascript:如何从URL中抓取片段并将其写入一些PHP
- 抓取浏览器扩展程序 ID
- 从元素jQuery Each中抓取ID字段
- 使用jquery从Youtube feed xml中抓取视频Id
- Ajax请求-抓取/加载仅Div Id
- 抓取数据ID值
- 在一个ng-repeat之后,我需要隔离并抓取一个元素'id'
- Javascript/Jquery抓取ID与不同的数字
- Javascript抓取span标签与类和id
- 抓取没有id、类、属性等的动态元素中的文本
- 从输入字段中抓取值并提取ID
- 抓取:浏览器的会话 ID 有效,但抓取的会话 ID 无效
- 动态抓取表单ID,关闭父表单中的所有按钮