有没有爬虫大佬,问个模拟登录的问题。关于 discuz

2020-07-06 09:40:39 +08:00
 autoname

模拟登录 藏宝湾 一直都是失败

其他论坛都可以,

head 头也看过了,cookie 也看过了,没什么差

死活就是登录不了,用 okhttp3 或 jsoup 没一个能登录上的

跪求大佬指点迷津

3839 次点击
所在节点    Java
45 条回复
jiejiss
2020-07-06 11:27:30 +08:00
@autoname #6 没抄对,你的 referer 少了个末尾斜杠
autoname
2020-07-06 11:28:04 +08:00
@bzj 不能啊!就算 ide 里面写错了, 我这 postman 总不会再错吧,我也在浏览器登录,退出,好几次了,都很正常的呀
autoname
2020-07-06 11:30:20 +08:00
@bzj 大佬 发下你的 header 头,我再传传,这太郁闷了,dz 官方和 lochost 都登的好好的。独独藏宝湾不行
jiejiss
2020-07-06 11:31:01 +08:00
@autoname #22 对不起,但你 postman 的 referer 头错了,遇到这种问题不应该首先检查有没有抄错参数吗
liubian
2020-07-06 11:33:18 +08:00
jiejiss
2020-07-06 11:35:22 +08:00
@autoname #23 看到 #25,那就不是 Referer 的问题,你去看下浏览器 Network 栏的 HTTP Header 吧
autoname
2020-07-06 11:35:47 +08:00
@jiejiss 我也加上了没用,这只是告诉他 登陆后跳到什么地方,传什么都可以的
autoname
2020-07-06 11:39:29 +08:00
@liubian wocao 我打算 重新注册一个号看看, 我原来的是中文账号,。目前密码错误 15 次,尝试不了
locoz
2020-07-06 11:41:42 +08:00
给你个建议:打开抓包工具,先抓一遍浏览器发出去的登录包,然后再抓一遍你自己程序发出去的登录包,接着拿这两个包进行对比,有差异的地方就是你需要注意的地方了。两个静态参数一样、动态参数生成方式一样的请求,是不可能得到不一样的结果的。
locoz
2020-07-06 11:43:43 +08:00
@locoz #29 补充一下,参数指整个 HTTP 请求流程中的所有东西,包括但不限于 URL 、Headers 、Body 、SSL/TLS 的一些参数等。
autoname
2020-07-06 11:54:43 +08:00
@locoz 感谢大佬建议,但 jsoup 或者 okhttp3 走的都是 java 内部的 我用 Fiddler 抓不到他.用代理发出来又要设置证书,非常麻烦啊,

刚才重新注册了一个号,登录成功了,发现是账号问题,估计他那 dz3.4 版本比较老,不支持中文账号模拟登录,

可惜了,又要用小号权限不够高。不好爬帖子,
jiejiss
2020-07-06 11:55:16 +08:00
你确定这个站有做一毛钱的反爬?

curl 'https://www.iopq.net/api/mobile/index.php?version=4&module=login&loginsubmit=yes&mapifrom=wx&charset=utf-8' \
-H 'content-type: application/x-www-form-urlencoded' \
--data-raw 'username=username&password=password'

我这样都成功了
jiejiss
2020-07-06 11:56:10 +08:00
@autoname #31 你是不是中文账号没有 encodeURIComponent 啊……那不能怪人家版本低啊
locoz
2020-07-06 12:00:43 +08:00
@autoname #31 抓包跟是不是走的 Java 内部无关,你代码里是可以设置代理的,直接设置个代理然后设置忽略证书就好了。
你新号可以但旧号不行的原因多半是因为你没有对中文进行编码操作,毕竟你浏览器可以...
autoname
2020-07-06 12:36:36 +08:00
@locoz 是啊,我也用过 Fiddler 抓包里面发送 http 编码的用户名,

类似这样%e4%b8%ad%e6%96%87

也用过 unicode \u4e2d\u6587

都失败了,今天才发现是用户名问题,请问大佬 这用户名要怎么编码
autoname
2020-07-06 12:38:40 +08:00
@jiejiss 确实没有,一般用 dz 的都不会去弄这些反扒什么,加密什么
locoz
2020-07-06 12:43:11 +08:00
@autoname #35 具体用什么编码要抓包看的,乱试没有用。我刚刚看了一下你说的这个网站,它用的是基于 gb2312 ( gb 系列)的 urlencode,比较老;而现在一般的 urlencode 会是基于 utf-8 的,所以你前面的尝试失败了就是因为这个原因。
解决办法就是把代码里的 urlencode 部分设置使用 gb2312 或更高版本的 gb 系列编码,java 的代码应该是 java.net.URLEncoder.encode(str, "GB18030")这样。
autoname
2020-07-06 12:45:12 +08:00
@locoz 谢谢大佬指点。gb2312 就用这个 java.net.URLEncoder.encode(str, "GB18030") 一般都可以吗
谢谢大佬
locoz
2020-07-06 12:45:52 +08:00
@locoz #37 顺便再补充一下,字库量 gb2312 < gbk < gb18030,通常情况下直接使用 gb18030 处理 gb 系列的编码即可,它是向下兼容的。
locoz
2020-07-06 12:47:22 +08:00
@autoname #38 一般碰到这种一串%xx 的就是 urlencode 了,直接拿到 http://tool.chinaz.com/tools/urlencode.aspx 里面试一下,哪个解出来的结果正常就是基于哪个编码的。

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

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

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

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

© 2021 V2EX