V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
abelyao
V2EX  ›  问与答

请教关于 PHP 和 Python 下自动领取 V2EX 金币的脚本问题,困扰了好久

  •  1
     
  •   abelyao · 2015-03-22 17:59:03 +08:00 · 2990 次点击
    这是一个创建于 3566 天前的主题,其中的信息可能已经有所发展或是发生改变。
    老实说
    从第一天玩 V2EX 就有想写一个自动领取每日金币奖励的工具
    尝试过 PHP 和 Python

    PHP 使用 curl
    Python 使用 urllib 和 urllib2
    模拟登录什么的都没问题

    但是!
    到了请求 /mission/daily/redeem?once=***** 这一步就一直失败
    总是提示 “今天的登录奖励已经领取过了哦” 但其实是还没领取的,而且领取按钮还在

    一开始使用 PHP 写的,失败,不甘心,本着钻研的精神(说得真好听 →_→)
    又硬着头皮用 Python 又写了一份脚本(在此之前没接触过 Python…)
    结果还是一样

    在 github 找到了许多 v2ex 的脚本,试了三四份,只有一份 python 的可以成功领取
    看了一下也没什么区别啊
    无论是 referer 还是 user-agent 等 header 信息都有添加

    到底 v2ex 是使用了什么黑魔法来防御的…?
    不甘心啊…
    希望高手指点一下

    不为别的,就想知道是哪个关键点我忽略了?
    如果只是为了自动领金币,我可以用现有的脚本来运行,也不会花了这么长时间用不同语言来尝试了
    第 1 条附言  ·  2015-03-22 18:54:41 +08:00
    总算搞明白了,登录之后应该先进一次首页,再进入每日任务的页面。
    之前自作聪明,为了节省一次请求,在登录的时候用 next 参数直接进入任务页面。
    18 条回复    2015-04-18 14:19:38 +08:00
    mornlight
        1
    mornlight  
       2015-03-22 18:04:09 +08:00
    HTTP 包抓出来看过了吗?只看代码可能有疏漏。
    如果真是同一个IP 同样的HTTP 请求,不应该会出现你说的情况。
    yxjxx
        2
    yxjxx  
       2015-03-22 18:38:11 +08:00
    binux
        3
    binux  
       2015-03-22 18:43:26 +08:00
    https://qiandao.today/tpl/8/edit
    abelyao
        4
    abelyao  
    OP
       2015-03-22 18:55:06 +08:00
    @mornlight
    @yxjxx
    @binux

    已经搞清楚了,APPEND 在主帖中。
    kn007
        5
    kn007  
       2015-03-22 19:02:23 +08:00
    @abelyao 好奇php怎么实现
    abelyao
        6
    abelyao  
    OP
       2015-03-22 19:04:55 +08:00
    @kn007 PHP 用 CURL 就可以咯
    kn007
        7
    kn007  
       2015-03-22 19:10:20 +08:00
    @abelyao 厚脸皮求上传到github项目
    falcon05
        8
    falcon05  
       2015-03-22 19:34:32 +08:00 via iPhone
    进入一次首页后发生了什么?cookie变化了?
    xzem
        9
    xzem  
       2015-03-22 20:52:19 +08:00 via Android
    @falcon05 应该就是cookie
    abelyao
        10
    abelyao  
    OP
       2015-03-22 22:10:45 +08:00
    @kn007 被你这么一问我突然有点没底了…
    因为刚刚是在 python 下实现的,我现在用 PHP 试试,如果成功了就共享出来~
    kn007
        11
    kn007  
       2015-03-22 23:18:33 +08:00
    @abelyao 好的,感谢!php配合正则应该没问题,最近比较忙,回头我也试试
    fuxkcsdn
        12
    fuxkcsdn  
       2015-03-22 23:28:53 +08:00
    最开始有每日奖励的时候用 bash+wget 搞定过,大概1、2礼拜后换了台 VPS ,然后该脚本就失效了...
    abelyao
        13
    abelyao  
    OP
       2015-03-24 12:34:59 +08:00
    @kn007 已发到 GitHub,我就不专门开个新帖了 :)
    https://github.com/abelyao/v2ex-daily
    kn007
        14
    kn007  
       2015-03-24 12:47:34 +08:00 via Android
    @abelyao 收到,回去看看
    kn007
        15
    kn007  
       2015-03-24 21:54:21 +08:00
    @abelyao 测试下貌似不成功,因为登录后是302,而116行对于非200返回直接错误退出了。去掉后,貌似balance一直返回false。即便都砍掉,直接请求/mission/daily/redeem?once=xxxxx,也是302失败,我自己用浏览器本地php测试也是302失败。你那边没问题么
    abelyao
        16
    abelyao  
    OP
       2015-03-25 01:07:26 +08:00 via iPhone
    @kn007 302 是跳转吧?CURL 中有设置允许跳转的话最终是会得到一个 200 的响应结果的啊,我这边已经几个账号一起运行了都可以的
    kn007
        17
    kn007  
       2015-03-25 06:37:31 +08:00
    @abelyao 我看到了,可能我这边不行?因为我自己在浏览器试了也不行。郁闷。环境是php5.5.20、curl7.39.0。这两天没时间,回头我再试试。谢谢。
    nj
        18
    nj  
       2015-04-18 14:19:38 +08:00
    @abelyao 请问你是如何让这个模拟登录的脚本运行起来呢?就是如何实现让它去打开浏览器去签到?谢谢了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5661 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:37 · PVG 09:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.