我想获取已将请求发送到服务器的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
获取的一种方法是根据请求进行字符串处理,但我相信会有更标准的东西。
答案 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