Получить URL реферера в python/webapp2 для почтового запроса

Я хочу получить URL реферера, который отправил запрос на сервер. Я использую фреймворк webapp2 на appengine.

когда я делаю:

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 ответа

Решение

Как упоминалось в вашем комментарии, это происходит в webapp2, однако, если вы хотите перенаправить пользователя в то место, откуда пришел запрос, это может быть так просто:

webapp2.redirect(self.request.referer)

Для почтового запроса self.request.referer не работает. Это работает только для запроса на получение.

Что вы можете сделать, это сохранить реферера в 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)

Глобальная переменная тоже должна работать.

Если, как и я, вы заинтересованы в исходном реферере, но глубже в коде и не имеете прямого доступа к запросу, запрос env, похоже, будет работать:

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

Результат, локально, что-то вроде

http://0.0.0.0:8001/myendpiont/someid?a=true
Другие вопросы по тегам