1

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

class Association(models.Model):
    name = models.CharField(max_length=25, blank=True, null=False)
    publication_doi_url = models.TextField(blank=True)

一些 URL 有多个重定向;因此我编写了一个函数来获取最终 URL。它主要工作,除了少数。例如,URL https://doi.org/10.1603/EC11207重定向将其显示为最终 URL https://academic.oup.com/jee/article-lookup/doi/10.1603/EC11207。但是,这返回的 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")

4

1 回答 1

0

首先,您可以查看本章https://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history,您可以在其中找到重定向背后的逻辑。

r = requests.get('http://original.url/')

>>> r.url
'https://redirected.url/'

>>> r.history
[<Response [301]>]

请看以下段落:

如果请求超过配置的最大重定向数,则会引发 TooManyRedirects 异常。

引发此错误的限制为30 次

于 2021-04-14T21:16:35.157 回答