乙個相對完整的http請求,輸入ip和埠,輸出響應碼,響應頭,響應體,是否超時,以及出錯時的錯誤資訊
處理包括:
1.協議處理,如果是443用https,其他用http
2.httperror處理,httperror一般是401,403,404之類的錯誤,雖然報錯,但是也有響應頭。注意獲取錯誤資訊時要用str(e),其他的比如repr(e)得到的不是字串,e.read()是響應體,不是錯誤原因
3.urlerror處理,一般是connection refused之類的錯誤。注意獲取錯誤資訊時要用str(e.reason)
4.響應體gzip解壓
5.響應體編碼轉換
處理http錯誤
#print "str(e):%s\nrepr(e):%s\ne:%s\ne.read():%s\n" % (str(e), repr(e), e, e.read())
error_reason =str(e)
body =e.read()
header =e.headers
except
urllib2.urlerror, e:
traceback.print_exc()
error_reason =str(e.reason)
if error_reason == "
timed out
": #
判斷是否超時
is_timeout =true
return
is_timeout, error_reason, code, header, body, title
except
exception, e:
traceback.print_exc()
error_reason =str(e)
return
is_timeout, error_reason, code, header, body, title
ifnot
header:
return
is_timeout, error_reason, code, header, body, title
#解壓gzipif'
content-encoding
'in header and
'gzip
'in header['
content-encoding']:
html_data =stringio.stringio(body)
gz = gzip.gzipfile(fileobj=html_data)
body =gz.read()
#編碼轉換
try:
html_encode =get_encode(header, body).strip()
if html_encode and len(html_encode) < 12:
body = body.decode(html_encode).encode('
utf-8')
except
:
pass
#獲取title
try:
title = re.search(r'
(.*?)
', body, flags=re.i |re.m)
iftitle:
title = title.group(1)
except
:
pass
return
is_timeout, error_reason, code, str(header), body, title
#獲取html編碼
defget_encode(header, body):
try:
m = re.search(r'
| |/)
', body, flags=re.i)
ifm:
return m.group(1).replace('
"', ''
)
except
:
pass
try:
if'content-type'in
header:
content_type = header['
content-type']
m = re.search(r'
.*?charset=(.*?)(;|$)
', content_type, flags=re.i)
ifm:
return m.group(1)
except
:
pass
chardit1 =chardet.detect(body)
encode_method = chardit1['
encoding']
return
encode_method
if__name__ == "
__main__":
data =
res = plugin_homepage(data, 3)
print res
PHP cURL獲取HTTP響應頭
平時做開發時,經常會用到php的curl擴充套件,用於請求外部http介面。大多數情況下,我們只需要獲取口返回的響應體 http response body 但如果我們想獲取響應頭 http response header 那可以怎麼做呢?可惜的是,curl擴充套件沒有提供原生的方法讓我們 以陣列的...
Vuejs之axios獲取Http響應頭
接入後端api 就遇到了乙個問題了 在用 axios 獲取 respose headers 時候獲取到的只有的 object下面是伺服器返回的響應頭,我需要拿到的是 key 使用 respose.headers 拿到的只用兩個預設的headers,嘗試了使用捕獲響應頭的方法 axios.interc...
http請求,響應
http請求頭 accept 用於告訴伺服器,客戶機所支援的資料型別 accept charset 用於告訴伺服器,客戶機所採用的碼表 accept encoding 用於告訴伺服器,客戶機所支援的資料壓縮格式 accept language 用於告訴伺服器,客戶機的語法環境 host 用於告訴伺服...