python 獲取http響應

2021-09-07 15:08:09 字數 3686 閱讀 7364

乙個相對完整的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:

print

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:

print

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 用於告訴伺服...