最近做模拟登陆发现的一个奇怪的问题,希望有大神能来解释一下

2017-09-07 06:41:01 +08:00
 XiaoFaye
最近在做一个网站的模拟登陆,基本步骤如下:
先打开登陆页,从页面的 Hidden Field 里面找到随机 Token,然后和用户名密码一起 Post 过去。

首先我用.NET Core 2.0 去实现,先用 HttpWebRequest 打开页面,拿到 Token,然后再开一个新的 HttpWebRequest 把数据 Post 过去,测试一切正常,登陆成功!

后来因为某些原因,我开始实现 Linux 下面的 Curl 版本。
步骤也差不多,先用 Curl 拿到页面 Token,然后再把数据 Post 过去。

现在问题就是 Curl 版本怎么也不成功,已经检查过拿到的 Token 是对的。

后来作对比的时候发现,用.NET 下面的 HttpWebRequest 拿到的页面 Token,再放 Curl 里面直接 Post 过去,登陆就成功了。。。。

现在困扰我的就是.NET 下面用 HttpWebRequest Get 跟 Curl 的 Get 有什么区别吗?为什么 Curl 拿到的 Token 是错的?
3371 次点击
所在节点    程序员
13 条回复
e9e499d78f
2017-09-07 06:43:00 +08:00
cookiejar
LevineChen
2017-09-07 06:44:44 +08:00
curl 没带 cookie 吧
XiaoFaye
2017-09-07 06:55:23 +08:00
带了,两个版本都带了。但是 Curl 下面 Post 返回的关键 Cookie 都变成 deleted 了。。。
ahhui
2017-09-07 08:37:13 +08:00
指定了 User Agent 了吗?
HYSS
2017-09-07 08:42:14 +08:00
photomjs
yy1193889747
2017-09-07 09:03:35 +08:00
Curl 拿到的 token 到底是正确还是错误呢
XiaoFaye
2017-09-07 10:30:23 +08:00
@yy1193889747 @ahhui

Token 是正确的,至少从 Curl 拿到的网页源代码对比就知道了。
User-agent 没有任何影响。只要从 HttpWebRequest 请求的页面里拿 Token,那就百分百会 POST 成功。
dsg001
2017-09-07 11:05:22 +08:00
抓包 curl、HttpWebRequest,对比下看看有木有区别
Patrick95
2017-09-07 11:42:14 +08:00
后面的 curl 方案应该是 post 的时候没有把 cookie 传过去。

可以考虑第一次拿 token 的时候从 header 里把 cookie 分离出来,然后 post 的时候给 CURLOPT_COOKIE 赋值带上 cookie,不用 CookieJar 了。
XiaoFaye
2017-09-07 13:21:37 +08:00
@Patrick95 在.NET 方案里,Post 的时候不需要带第一个页面的 Cookie,我只是 assign 了一个新的 CookieContainer 给它。就算我带了,Curl 也 Post 不成功。
lieh222
2017-09-07 14:55:44 +08:00
抓包,对比报文,下一。。下一 ti 不让发了
dbj1991
2017-09-07 15:00:05 +08:00
@HYSS 先把单词拼对了再回复吧
HYSS
2017-09-07 16:46:34 +08:00
@dbj1991 最近生活不顺?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388803

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX