GAE的urlfetch不能在Discuz!进行POST操作的原因
2009 8 5 03:27 PM 2673次查看
分类:Google App Engine 标签:Google App Engine
第一个是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!发帖的…
向下滚动可载入更多评论,或者点这里禁止自动加载。