gpt4 book ai didi

python - 通过 python urllib 和 urllib2 在本地主机上进行 HTTP 请求非常慢

转载 作者:行者123 更新时间:2023-12-01 05:33:16 25 4
gpt4 key购买 nike

我使用 urllib 和 urllib2 编写了一个简单的类来发送 http 请求并获取响应。然而,任何使用本地主机 IP 地址的请求都非常慢。

LOCALHOST 的 IP 地址 = 192.168.158.27

import urllib2,urllib,re,datetime,time

class HTTPRequest():
def __init__(self,**kargs):
self._response = None
self._buffer = None
self._conn = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(self._conn)

def _encode_url(self,**kargs):
try:
params = urllib.urlencode(kargs)
except:
raise HTTPError("Failed to encode URL parameters..")

return str(params)

def _request(self,url=None,params=None):
try:
self._buffer = self._conn.open(url,params)
self._response = self._buffer.read()
except ValueError:
raise HTTPError("Invalid URL %s" % url)
except:
raise HTTPError("Failed to send HTTP(s) Request")
return str(self._response)

class HTTPError(Exception):
pass


PARAM_PASSWORD = 'password'
PARAM_USER = 'userName'
PARAM_ACTION = 'a'
PARAM_RID = 'rid'
PARAM_XO = 'xo'
PARAM_START_TIME = 't1'
PARAM_END_TIME = 't2'
PARAM_PATH = 'path'

BOOLEAN_TRUE = 'true'
BOOLEAN_FALSE = 'false'

ACTION_SIGNIN = 'signIn'
ACTION_SEARCH = 'search'
ACTION_GET_NEXT_RESULTS = 'getNextResults'

STATUS_SUCCEEDED = 'succeeded'

DEFAULT_WAIT = 5

host = "192.168.158.27"
user = "admin"
password = "admin"
protocol = "https"
port = 8443
query = "vm[=name rx (?i) *]&[@cpuUsage rx b .+][@cpuUsagemhz rx b .+]"
start_time = "10/05/2013 16:16:00"
end_time = "10/05/2013 17:16:00"
base_url = "%s://%s:%d" % (protocol,host,port)
login_url = "%s/user" % base_url

http = HTTPRequest()

attributes = {PARAM_PASSWORD : password,
PARAM_USER : user,
PARAM_ACTION : ACTION_SIGNIN,
PARAM_RID : 1000,
PARAM_XO : BOOLEAN_TRUE}

params = http._encode_url(**attributes)

if not http._request(login_url,params):
print "Login Failed.."

else:
print "Login Successful.. \n"



rid = 1000

search_url = "%s/Search" % base_url

status = STATUS_SUCCEEDED
hasMoreData = BOOLEAN_TRUE
completed = BOOLEAN_FALSE
total = 0
processed = 1
responseContent = ""
xml_dict = {}
_response = ""

attributes = {PARAM_START_TIME : start_time,
PARAM_END_TIME : end_time,
PARAM_ACTION : ACTION_SEARCH,
PARAM_RID : rid,
PARAM_PATH : query}

print "URL PARAMETERS :"
print "\tBase url = %s" % base_url

for param in attributes:
print "\t%s = %s" % (param,attributes[param])

#Query Execution Start Time
start = datetime.datetime.now()

while True:
params = http._encode_url(**attributes)
if hasMoreData == BOOLEAN_TRUE:
#Delay 10ms
time.sleep(10/1000)

#Send HTTP Request
response = http._request(search_url,params)

pattern = re.match(".*?hasMoreData=\"(.*?)\".*?",response)
if pattern:
hasMoreData = pattern.group(1)

pattern = re.match(".*?status=\"(.*?)\".*?",response)
if pattern:
status = pattern.group(1)

pattern = re.match(".*?completed=\"(.*?)\".*?",response)
if pattern:
completed = pattern.group(1)

pattern = re.match(".*?processed=\"(.*?)\".*?",response)
if pattern:
processed = pattern.group(1)

pattern = re.match(".*?total=\"(.*?)\".*?",response)
if pattern:
total = pattern.group(1)

pattern = re.match(".*?matched=\"(.*?)\".*?",response)
if pattern:
matched = pattern.group(1)

attributes = {PARAM_ACTION : ACTION_GET_NEXT_RESULTS,
PARAM_RID : rid}

if matched != "0":
response = re.sub(r'\n',"",response)
matchObj = re.search(r'(<Resource.*</Resource>)',response)

resp_match = ""
if matchObj:
resp_match = matchObj.group(1)

responseContent = str(responseContent) + str(resp_match)
else:
#Query Execution Completed
#Query Execution End Time
end = datetime.datetime.now()

print "RESULTS : "
print "\tStatus = %s"%status
print "\tHas More Data = %s"%hasMoreData
print "\tCompleted = %s"%completed
print "\tProcessed = %s"%processed
print "\tTotal = %s"%total
print "\tMatched = %s"%matched
print "\nQuery Execution Started : %s" % start
print "Query Execution Ended : %s\n" % end

if total != processed:
err = "The number records processed did not match"
err += " with the number of records completed."
print err

if not status == STATUS_SUCCEEDED:
err = "The responce status is not 'succeeded'"
print err

if completed == BOOLEAN_FALSE:
err = "The repsponse is completed. "
err += "However, the flag is set to 'False'"
print err
break

最佳答案

尝试使用 127.0.0.1,而不是本地网络 IP。

关于python - 通过 python urllib 和 urllib2 在本地主机上进行 HTTP 请求非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19699393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com