3

サーバーへのリクエストで送信されたリファラー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

取得する1つの方法は、要求に応じて文字列処理を行うことですが、もっと標準的なものがあると確信しています。

4

3 に答える 3

15

コメントで述べたように、これはwebapp2で発生しますが、リクエストが送信された場所にユーザーをリダイレクトする場合は、次のように簡単にできます。

webapp2.redirect(self.request.referer)
于 2012-07-02T09:54:06.847 に答える
2

ポストリクエストの場合self.request.refererは機能しません。これは、getリクエストに対してのみ機能します。

できることは、getリクエストが届いたとき(通常は何かを投稿する前)にリファラーを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

私のように、元のリファラーに興味があるが、コードが深く、リクエストに直接アクセスできない場合は、envのクエリが機能しているようです。

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

結果は、ローカルでは、次のようなものです。

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