尝试检测过期的短链接,状态码和响应链接出现问题
我正在检查我客户内容中的短网址。目前为止,我使用了一个简单的 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