資源簡(jiǎn)介
用python3寫的基于http協(xié)議的通訊端,可以將客戶端組織的數(shù)據(jù)發(fā)往服務(wù)器,自動(dòng)幫你管理session,支持失敗自動(dòng)重試
代碼片段和文件信息
#?-*-?coding:utf-8?-*-
#!/usr/bin/python3
from?http?import?client
from?urllib.parse?import?urlencode
from?urllib.parse?import?urlparse
import?time
class?HttpClient:
????‘‘‘
????基于http協(xié)議的通訊端,可以將客戶端組織的數(shù)據(jù)發(fā)往服務(wù)器自動(dòng)幫你管理session
????‘‘‘
????C_HTTP_HEADER_USER_AGENT?=?‘user-agent‘
????C_HTTP_HEADER_COOKIE?=?‘cookie‘
????C_HTTP_HEADER_SET_COOKIE?=?‘Set-Cookie‘
????__server=None
????__port=None
????__service=None
????__timeout?=?None
????__sessionidname?=?None
????__cookies?=?{}
????__requestheaders?=?{}
????__hasresponse?=?False
????__response?=?None
????def?setTimeout(self?timeout):
????????‘‘‘設(shè)置超時(shí)時(shí)間
????????parameter
timeout?超時(shí)時(shí)間
????????return
None
????????‘‘‘
????????self.__timeout?=?timeout
????def?addRequestHeader(self?headerName?value):
????????‘‘‘
????????添加請(qǐng)求頭信息
????????parameter
headerName 請(qǐng)求名
value 請(qǐng)求內(nèi)容
return
None
????????‘‘‘
????????if?headerName?in?self.__requestheaders.keys():
????????????del?self.__requestheaders[headerName]
????????self.__requestheaders[headerName]?=?value
????def?setSessionIdName(self?sessionIdName):
????????‘‘‘
????????設(shè)置sessionid的名字,通過(guò)此屬性可以避免每次提交請(qǐng)求都創(chuàng)建新session的問(wèn)題
????????parameter
sessionIdName?session的名字
????????return
None
????????‘‘‘
????????self.__sessionidname?=?sessionIdName
????def?clearRequestHeaders(self):
????????‘‘‘
????????清除請(qǐng)求頭
????????‘‘‘
????????self.__requestheaders.clear()
????def?send(self?method?url?parameters):
????????‘‘‘
????????發(fā)送數(shù)據(jù)
????????parameter
????????????method?GET/POST
????????????url????請(qǐng)求地址http://127.0.0.1:8080/serveric/demo1
????????????parameters?請(qǐng)求Dict
????????return
True/False
????????‘‘‘
????????self.__hasresponse?=?False
????????urlres?=?urlparse(url)
????????for?i?in?range(1?3):
????????????conn?=?client.HTTPConnection(urlres.hostname?urlres.port?False?timeout=self.__timeout)
????????????try:
????????????????if?“POST“?==?method.upper():
????????????????????self.addRequestHeader(“Content-Type“?“application/x-www-form-urlencoded“)
????????????????????self.addRequestHeader(“Cache-Control“?“no-cacheno-storemust-revalidatepost-check=0ptr-check=0“)
????????????????????self.addRequestHeader(‘Accept‘?‘text/plain‘)
????????????????????self.addRequestHeader(“Connection“?“Keep-Alive“)
????????????????sCookies?=?self.map2String(self.__cookies?‘;‘)
????????????????if?not?sCookies.find(self.__sessionidname):
????????????????????sCookies?=?““.join([sCookies?“;“?self.__sessionidname?“=“?self.__cookies[self.__sessionidname]])
????????????????if?sCookies?!=?None?and?sCookies?!=?““:
????????????????????self.addRequestHeader(self.C_HTTP_HEADER_COOKIE?sCookies)?#把Cookies信息加入RequestHeader
????????????????sParams?=?urlencode(parameters?encoding=‘gbk‘)
????????????????conn.request(method?urlres.path?body=sParams?headers?=?self.__requestheaders)
????????????????result?=?conn.getresponse()
????????????????if?result.status?!=?200:
????????????????????return?False
????????????????self.__response=?result.read().decode(‘utf-8‘)
????????????????s
評(píng)論
共有 條評(píng)論