1

フィードの URL を取得するために Google アプリ エンジンを使用していますが、いくつかの URL は 301 リダイレクトです。結果を返す最終的な URL を取得したいです。

URLを解析するためにユニバーサルフィードリーダーを使用していますが、最終的なURLを取得できる方法または関数があります。

4

3 に答える 3

3

urlfetch APIを使用している場合、次のように設定すると、から取得した応答オブジェクトfinal_urlの属性にアクセスできます。urlfetch.fetch()follow_redirectsTrue

>>> from google.appengine.api import urlfetch
>>> url_that_redirects = 'http://www.example.com/redirect/'
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=False)
>>> resp.status_code
302 # or 301 or whatever
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=True)
>>> resp.status_code
200
>>> resp.final_url
'http://www.example.com/final_url/'

follow_redirectsキーワード引数のデフォルトは であるため、明示的に設定する必要はありませTrueん。

于 2010-07-22T22:35:52.687 に答える
3

解析によって「最終」URL を取得することはできません。解決するには、少なくとも HTTP HEAD 操作を実行する必要があります。

于 2010-07-22T14:12:27.407 に答える
0

これを行うには、リダイレクトを手動で処理します。fetch を呼び出すときは、 を渡しfollow_redirects=Falseます。応答オブジェクトの HTTP ステータスがリダイレクト コード (301 または 302) である場合は、Location応答ヘッダーを取得し、HTTP ステータスが別のものになるまで再度取得します。リダイレクト ループを回避するために、サニティ チェック (おそらく最大 5 回のリダイレクト) を追加します。

于 2010-07-22T14:21:01.183 に答える