python获取重定向url_python中检测url重定向到的地址的例子
2016年最長(zhǎng)的假期也過了,這周連上7天班,之前還覺得挺恐怖,沒想到這周真是要忙死的節(jié)湊,還真沒覺得多漫長(zhǎng),一晃明天就周五了,干運(yùn)維的就是突發(fā)的事情多,冷不丁的不知道哪里就冒出個(gè)問題,就夠搞半天的,最近領(lǐng)導(dǎo)有一批站點(diǎn),需要檢測(cè)這些站點(diǎn)是否重定向到了其它url上,因?yàn)檎军c(diǎn)太多,這種事就只能通過腳本來實(shí)現(xiàn)了,當(dāng)然我還是用個(gè)人最喜歡的request模塊來完成這個(gè)任務(wù),基本原理就是判斷站點(diǎn)返回的status_code,如果是3XX,就認(rèn)為是重定向了,當(dāng)然還有其它情況,比如訪問超時(shí),域名解析錯(cuò)誤,網(wǎng)絡(luò)錯(cuò)誤等,也要做基本的判斷,最起碼要能報(bào)出來,需要檢測(cè)的站點(diǎn)放到了一個(gè)文件里,因?yàn)檎军c(diǎn)收集的格式不統(tǒng)一,就做了簡(jiǎn)單的判斷,如果不是以http開通的,就加上http,拼接成完整的url,整個(gè)腳本如下:
#!/usr/bin/env python
import sys
import requests
def check_for_redirects(url):
try:
r = requests.get(url, allow_redirects=False, timeout=0.5)
if 300 <= r.status_code < 400:
return r.headers['location']
else:
return '[no redirect]'
except requests.exceptions.Timeout:
return '[timeout]'
except requests.exceptions.ConnectionError:
return '[connection error]'
def check_domains(urls):
for url in urls:
url_to_check = url if url.startswith('http') else "http://%s" % url
redirect_url = check_for_redirects(url_to_check)
print("%s => %s" % (url_to_check, redirect_url))
if __name__ == '__main__':
fname = 'domains.txt'
try:
fname = sys.argv[1]
except IndexError:
pass
urls = (l.strip() for l in open(fname).readlines())
check_domains(urls)
腳本就定義了2個(gè)函數(shù),一個(gè)是負(fù)責(zé)檢查結(jié)果的返回,一個(gè)從文件讀取url,主要是根據(jù)r.status_code的返回值來進(jìn)行判斷,這個(gè)在開通已經(jīng)說過了,就不在重復(fù)了,其它部分也很好理解,如有不明白的可以給我留言。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python获取重定向url_python中检测url重定向到的地址的例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7录屏_屏幕录制软件哪个好用?推荐
- 下一篇: python之_init_函数的简介