获取验证码是单独的 url, 那么每次的请求怎么能与验证码同步

2018-08-20 16:36:12 +08:00
 wsds

This is an example link

这是获取验证码连接

没有任何参数,怎么确保每次的查询,才能对应上这个验证码呢?

4456 次点击
所在节点    Python
30 条回复
WildCat
2018-08-20 16:38:17 +08:00
cookies / session?
zhoulv2012
2018-08-20 16:54:12 +08:00
我处理过的是,同一 session 去访问 example link,然后再去访问验证码,这就就等于刷新了验证码
harde
2018-08-20 16:54:15 +08:00
通常的做法是 session 保存。
wsds
2018-08-20 16:56:36 +08:00
requests.Session().get("http://www.cszjw.net/newCaptcha")获取的验证码,始终与 example link 不同步,不知道为什么
wangxiaoaer
2018-08-20 16:56:40 +08:00
说 session 存储的,如果是集群部署,同时没有 ip 固定的策略怎么处理?
crab
2018-08-20 16:58:14 +08:00
响应头:Set-Cookie
wangxiaoaer
2018-08-20 17:03:00 +08:00
@crab 把验证码放 Cookie 中,你认真的吗?
bk201
2018-08-20 17:20:44 +08:00
http://www.cszjw.net/newCaptcha?r=0.37396028425505023
====
这个不是参数?
===
用 session 方式感觉真古老
beforeuwait
2018-08-20 17:21:55 +08:00
要同一个 session 啊
wangxiaoaer
2018-08-20 17:24:45 +08:00
@wangxiaoaer 不好意思,我脑子短路了,集群下的 session 也可以集中存储。
dbw9580
2018-08-20 17:34:12 +08:00
@wangxiaoaer 集中储存就会成为瓶颈哦
Junwwwww
2018-08-20 17:42:54 +08:00
明明带了一个参数
wsds
2018-08-20 17:44:03 +08:00
@bk201
@Junwwwww
那怎么同步这个验证码呢
lcy630409
2018-08-20 17:49:15 +08:00
你是要用网页的形式代替 api 么?是的话 记录号 cookie 就行了,服务端根据 cookie 就会认为你是同一个人,同一个人的验证码会覆盖的,永远是最后获取的那个
wangxiaoaer
2018-08-20 17:50:40 +08:00
@dbw9580 可以再弄个 sessions 的集群啊,只是 sessions 的出入口唯一就行了。
passerbytiny
2018-08-20 18:08:01 +08:00
理论依据:HTTP 单次访问是无状态的,但 HTTP 连续访问是有会话状态的;会话状态由服务器保存;只要能够保证获取验证码、使用验证码这两个请求处于同一个会话,那么验证码就是可以验证的。

HTTP 会话状态是 OSI 第七层应用层独立管理的事,跟第四层传输层 TCP 连接没有任何关系。

HTTP 会话跟踪原理:首次连接服务器生成唯一标识,并且通知客户端;后续连接,客户端都带上该标识;服务器根据唯一标识,判断是否属于同一个会话。唯一标识由服务器生成和校验,客户端只能够暂存和传递,所以该会话是完全由服务器控制的。

HTTP 会话 Cookie 实现方式:服务器通过 set-cookie 将唯一标识通知给客户端,一般都会制定 cookie 的有效期是内存级别,级浏览器关了 cookie 就没了。

HTTP 会话 URL 重写实现方式:服务器通过 URL 重定向将唯一标识通知给客户端,唯一标识就在新的 URL 地址上,客户端不保存唯一标识,但后续的所有请求的 URL 地址中,都回带上唯一标识。此方式很容易失效。

以上两种,只是传统的实现方式,并不是唯一的。你完全可以抛开浏览器和服务器框架,自己实现会话跟踪。例如:如果服务器愿意,浏览器可以通过 H5 的 web 存储暂存唯一标识;服务器也可以抛开语言框架,自己写业务代码,用 redis 或者独立服务管理唯一标识(此时集群就不是事了)。甚至,经服务器允许后,多个客户端通过共享唯一标识,也可以共享会话;当然会话管理服务器、验证码服务器、业务服务器也可以是不同的服务器。
crab
2018-08-20 18:41:47 +08:00
@wangxiaoaer 我是说响应回来的新 cookies 里面可以对应上
wangxiaoaer
2018-08-20 19:43:01 +08:00
@crab #17 客户端从 cookie 里面读取出验证码不就直接发过去了吗?
Trim21
2018-08-20 19:58:24 +08:00
@wangxiaoaer 可以加密…= =
wsds
2018-08-20 21:29:42 +08:00
搞不定球,日了狗🐶

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

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

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

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

© 2021 V2EX