Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 重定向后如何获取最终目标URL?_Django_Python Requests_Django Custom Manager - Fatal编程技术网

Django 重定向后如何获取最终目标URL?

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

我正在尝试使用Django自定义管理命令测试模型中的有效URL。我有以下模型,我需要测试是否有不活动的URL(HTTP 404错误)

一些URL有多个重定向;因此,我编写了一个函数来获取最终的URL。它主要起作用,但很少起作用。例如,URL重定向将其显示为最终URL。但是,这将返回HTTP响应代码为302。还有一个重定向。如何获取最终URL?我假设日志允许基于IP的访问。该站点不需要用户名/密码。任何提示都会有帮助


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]>]