3

我想获取已在请求中发送到服务器的引荐来源网址。我在 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

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

4

3 回答 3

15

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

webapp2.redirect(self.request.referer)
于 2012-07-02T09:54:06.847 回答
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)

全局变量也应该起作用。

于 2014-10-21T00:29:27.377 回答
0

If, like me, you're interested in the original referrer but are deeper in the code and don't have direct access to the request, querying the env seems to work:

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

The result, locally, is something like

http://0.0.0.0:8001/myendpiont/someid?a=true
于 2015-07-22T17:06:45.213 回答