尝试检测过期的短链接,状态码和响应链接出现问题

1 投票
1 回答
44 浏览
提问于 2025-04-12 15:56

我正在检查我客户内容中的短网址。目前为止,我使用了一个简单的 requests.get(url) 方法,然后处理返回的链接和状态码。到目前为止,这样做给了我足够的信息。

现在,我遇到了一些过期的短网址。当我在浏览器中手动打开这些短网址时,我得到了

https://short.ly/?ref=expired&url=https://short.ly/abcdef

如果能解析响应链接中的参数,那样编码会简单很多,但我用 requests 库得到的结果并不是这样。相反,它返回的还是同样的链接和状态码200,这和任何正常页面是一样的。

有没有办法用 requests 库获取我在浏览器中看到的链接,还是说我必须使用像 Selenium 这样的库?在我的整体流程中,使用 Selenium 似乎有点过于复杂了。

1 个回答

1

Jeyekomon 指出,如果短链接存在,t.ly 会返回状态码 302,这个状态码表示它会把你重定向到长链接,而长链接会返回一个新的状态码。

如果找不到这个链接,你会得到状态码 200,通过多次重定向,你最终会到达 t.ly 的主站点。问题在于,requests 库会自动处理这些重定向,所以

 r=requests.get('https://t.ly/4WEYb')
 
 print(r.status_code)

它会返回长链接的状态码(https://www.google.com/search?q=foo

但是你可以通过设置 allow_redirects=False 来阻止这个自动重定向。

 def isLinkExsists(url):
     r=requests.get(url,allow_redirects=False)
     if r.status_code==302:
         return True
     elif r.status_code==200:
         return False
     else:
         #Handle t.ly server errors
         return False

撰写回答