Django 重定向后如何获取最终目标URL?
我正在尝试使用Django自定义管理命令测试模型中的有效URL。我有以下模型,我需要测试是否有不活动的URL(HTTP 404错误) 一些URL有多个重定向;因此,我编写了一个函数来获取最终的URL。它主要起作用,但很少起作用。例如,URL重定向将其显示为最终URL。但是,这将返回HTTP响应代码为302。还有一个重定向。如何获取最终URL?我假设日志允许基于IP的访问。该站点不需要用户名/密码。任何提示都会有帮助Django 重定向后如何获取最终目标URL?,django,python-requests,django-custom-manager,Django,Python Requests,Django Custom Manager,我正在尝试使用Django自定义管理命令测试模型中的有效URL。我有以下模型,我需要测试是否有不活动的URL(HTTP 404错误) 一些URL有多个重定向;因此,我编写了一个函数来获取最终的URL。它主要起作用,但很少起作用。例如,URL重定向将其显示为最终URL。但是,这将返回HTTP响应代码为302。还有一个重定向。如何获取最终URL?我假设日志允许基于IP的访问。该站点不需要用户名/密码。任何提示都会有帮助 def return_final_url(url_link): res
def return_final_url(url_link):
response = requests.get(url_link)
finalurl = ''
if response.history:
for resp in response.history:
pass
finalurl = response.url
return finalurl
class Command(BaseCommand):
help = 'Prints inactive urls (HTTP 404 error)'
def handle(self, *args, **kwargs):
for item in Association.objects.all():
base_url = "https://doi.org/"
url = base_url + item.publication
finalurl = return_final_url(url)
print("finalurl", finalurl)
response = requests.get(finalurl)
try:
response.raise_for_status()
except requests.exceptions.HTTPError:
print("HTTPError")
首先,您可以查看本章,从中可以了解重定向背后的逻辑
r = requests.get('http://original.url/')
>>> r.url
'https://redirected.url/'
>>> r.history
[<Response [301]>]
r=requests.get('http://original.url/')
>>>r.url
'https://redirected.url/'
>>>r.历史
[]
请看下面一段:
如果请求超过配置的最大重定向数,将引发TooManyRedirects异常
引发此错误的限制是。谢谢您的回复。在我的示例中,重定向不超过三次。这似乎是另一个问题。根据这一点,似乎我需要使用标题。我也尝试过这个建议。根据这一点,日志中似乎不允许有特定的选项。Hi@catuf感谢您的回复;)你所描述的可能是你的问题。我希望你能找到另一个解决你问题的办法。
r = requests.get('http://original.url/')
>>> r.url
'https://redirected.url/'
>>> r.history
[<Response [301]>]