如何还原缩短的URL?

21 投票
10 回答
30108 浏览
提问于 2025-04-16 07:11

我想要一个程序,可以把缩短的链接或者没有缩短的链接转换成它的完整链接。请问我该如何用Python来实现这个功能呢?

补充说明:

  • 情况一:缩短链接变成完整链接
  • 情况二:完整链接保持不变

例如,输入数组中的 bit.ly/silly 应该在输出数组中变成 google.com
再比如,输入数组中的 google.com 应该在输出数组中还是 google.com

10 个回答

5

Unshorten.me 提供了一个接口,你可以通过发送一个JSON或XML格式的请求,得到完整的网址作为回复。

34

使用requests库:

import requests

session = requests.Session()  # so connections are recycled
resp = session.head(url, allow_redirects=True)
print(resp.url)
40

向这个网址发送一个HTTP的HEAD请求,然后查看返回的状态码。如果状态码是30x,说明这个网址被重定向了,这时你需要查看Location这个头部信息,里面会有未缩短的网址。如果状态码是20x,那说明这个网址没有被重定向;另外,你可能还需要处理一些错误状态码(比如4xx和5xx),以便更好地应对问题。比如:

# This is for Py2k.  For Py3k, use http.client and urllib.parse instead, and
# use // instead of / for the division
import httplib
import urlparse

def unshorten_url(url):
    parsed = urlparse.urlparse(url)
    h = httplib.HTTPConnection(parsed.netloc)
    h.request('HEAD', parsed.path)
    response = h.getresponse()
    if response.status/100 == 3 and response.getheader('Location'):
        return response.getheader('Location')
    else:
        return url

撰写回答