python получить URL из запроса - PullRequest
0 голосов
/ 30 января 2020

я получаю данные из API в django. Данные поступают из формы заказа с другого веб-сайта.

Данные также содержат URL-адрес, например, как example.com, но я не могу подтвердить ввод, потому что у меня нет доступа к форме заказа.

URL, который я получаю, также может иметь разные типы. Больше примеров:

example.de
http://example.de
www.example.com
https://example.de
http://www.example.de
https://www.example.de

Теперь я хотел бы открыть URL-адрес, чтобы получить правильный URL-адрес. Например, если я открою example.com в своем браузере, я получу правильный URL http://example.com/, и это то, что я sh для всех URL.

Как я могу сделать это в python быстро?

1 Ответ

0 голосов
/ 30 января 2020

Если вы получаете status_code 200, вы знаете, что у вас есть действительный адрес.

В отношении HTTPS://. Вы получите ошибку SSL, если вы не Следуйте ответам в этом руководстве . Как только вы это сделаете, программа найдет правильный URL для вас.

import requests
import traceback

validProtocols = ["https://www.", "http://www.", "https://", "http://"]

def removeAnyProtocol(url):
    url = url.replace("www.","") # to remove any inputs containing just www since we aren't planning on using them regardless.
    for protocol in validProtocols:
        url = url.replace(protocol, "")
    return url

def validateUrl(url):
    for protocol in validProtocols:
        if(protocol not in url):
            pUrl = protocol + removeAnyProtocol(url)
            try:
                req = requests.head(pUrl, allow_redirects=True)
                if req.status_code == 200:
                    return pUrl
                else:
                    continue
            except Exception:
                print(traceback.format_exc())
                continue
        else:
            try:
                req = requests.head(url, allow_redirects=True)
                if req.status_code == 200:
                    return url
            except Exception:
                print(traceback.format_exc())
                continue

Использование:

correctUrl = validateUrl("google.com") # https://www.google.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...