获取python / webapp2中的referer url以获取发布请求

时间:2012-06-30 09:36:35

标签: python google-app-engine webapp2

我想获取已将请求发送到服务器的referer url。 我在appengine上使用webapp2框架。

当我这样做时:

def post(self, slug):
    print self.request 

我得到以下输出:

OST /first/person/ HTTP/1.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Language: en-US,en;q=0.8 Cache-Control: max-age=0 Connection: keep-alive Content-Length: 43 Content-Type: application/x-www-form-urlencoded Content_Length: 43 Content_Type: application/x-www-form-urlencoded Cookie: djdt=hide; csrftoken=09f29b2bfe9f51f16581bab7fe7c6f38; sessionid=49b995d954eae8d613cedc3f4e92a796 Host: 127.0.0.1:8080 Origin: http://127.0.0.1:8080 Referer: http://127.0.0.1:8080/person/1/ 

可以清楚地看到Referer: http://127.0.0.1:8080/person/1/

我只对引用者感兴趣,因此我尝试了:

referer = self.request.headers['Referer']
            print referer

给出输出:

False Status: 200 Content-Type: text/html; charset=utf-8 Content-Length: 0 Cache-Control: no-cache

获取的一种方法是根据请求进行字符串处理,但我相信会有更标准的东西。

3 个答案:

答案 0 :(得分:15)

正如您的评论中所提到的,这发生在webapp2中,但是如果您想将用户重定向到请求所在的位置,则可以这样简单:

webapp2.redirect(self.request.referer)

答案 1 :(得分:2)

对于帖子请求self.request.referer不起作用。这仅适用于获取请求。

您可以做的是在收到请求时(通常在您发布内容之前)将引用者保存在cookie中,然后当您发布时访问该cookie。

def get(self):
    self.response.headers.add_header('Set-Cookie', 'referer=%s; Path=/' % self.request.referer)
    # render your html
def post(self):
    # your logic here
    referer = str(self.request.cookies.get('referer'))
    self.redirect(referer)

全局变量也应该有用。

答案 2 :(得分:0)

如果像我一样,您对原始推荐人感兴趣但是代码更深入并且无法直接访问请求,则查询env似乎有效:

original_referrer = os.environ.get('HTTP_REFERER')  # NOTE: spelling is correct

结果在本地就像是

http://0.0.0.0:8001/myendpiont/someid?a=true