GAE的urlfetch不能在Discuz!进行POST操作的原因

标签:Google App Engine

今天在本地成功用Python领取了红包,但是移植到GAE上就不成功了,发现问题有二:

第一个是urlfetch会自动修改User-Agent,在后面加上AppEngine-Google; (+http://code.google.com/appengine)。而Discuz!的cookie和User-Agent相关,一旦改变User-Agent,cookie就失效。(这也是Chrome升级后,访问Discuz!论坛需要重新登录的原因。)
最终我把Firefox的User-Agent改成了Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 AppEngine-Google; (+http://code.google.com/appengine),拿到了一个正确的cookie;然后设置urlfetch的cookie为Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2

第二个是urlfetch会自动填充Referer,值为当前域名的根地址,例如http://keakon.appspot.com/
而在Discuz!的global.func.php里定义了一个submitcheck,其中这段代码会检查Referer字段:
empty($_SERVER['HTTP_REFERER']) || preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])
也就是必须为空,或相同域名。

由于Referer字段不允许更改,所以我彻底没办法了=。=

同样,由于GAppProxy也不能重设Referer,所以用这个代理是不能在Discuz!发帖的…

6条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?