Python 3.x Xml 데이터 기반 Http 요청 방법
회사 의 한 프로젝트 는 B/S 구 조 를 바탕 으로 WEB 서비스 와 통신 하기 때문에 XML 데 이 터 를 통신 데이터 로 사용 합 니 다.새로운 기능 을 추가 할 때 WEB 엔 드 와 클 라 이언 트 는 각각 다른 부서 에서 책임 을 지기 때문에 WEB 엔 드 기능 이 실현 되 는 과정 에서 스스로 테스트 를 요청 해 야 하기 때문에 Python 을 사용 하여 이 스 크 립 트 를 작 성 했 습 니 다.또한 이 스 크 립 트 는 처음에는 압력 테스트 기능 으로 발전 하 기 를 원 했 기 때문에 기본 적 인 방문 을 제외 하고 다 중 스 레 드 요청 을 추가 하 였 습 니 다.
전체 스 크 립 트 에 관련 된 Python 에 대한 지식 은 다음 과 같 습 니 다.
urllib.request 기반 Http 접근
다 중 스 레 드
클래스 와 방법의 정의
전역 변수의 정의 와 사용
파일 읽 기와 쓰기
……
2.소스 코드 와 결과
전체 프로그램 은 Python 소스 코드 와 프로필 을 포함 합 니 다.소스 코드 에 해당 하 는 주석 이 있 기 때문에 소스 코드 를 직접 붙 입 니 다.다음 과 같 습 니 다.
# TradeWeb
import threading, time, http.client, urllib.request, os
#import matplotlib.pyplot as plt
URL = 'http://127.0.0.1:8888/XXXXXXXXX/httpXmlServlet' # ,
TOTAL = 0; #
SUCC = 0; #
FAIL = 0; #
EXCEPT = 0 #
MAXTIME = 0 #
MINTIME = 100 # , 100
COUNT_TIME = 0 #
THREAD_COUNT = 0 #
CODE_MAP = {200:0, 301:0, 302:0, 304:0} # ( )
RESULT_FILE = 'tradeWebResult.xml' #
REQUEST_DATA_FILE = 'requestData.config' #
DATA = ''' tradeWebRequestData.config '''
TIME_LIST = [] #
# threading.Thread
class RequestThread(threading.Thread):
#
def __init__(self, thread_name):
threading.Thread.__init__(self)
self.test_count = 0;
#
def run(self):
global THREAD_COUNT
THREAD_COUNT += 1
#print("Start the count of thread:%d" %(THREAD_COUNT))
self.testPerformace()
#
def testPerformace(self):
global TOTAL
global SUCC
global FAIL
global EXCEPT
global DATA
global COUNT_TIME
global CODE_MAP
global URL
try:
st = time.time() #
start_time
cookies = urllib.request.HTTPCookieProcessor()
opener = urllib.request.build_opener(cookies)
resp = urllib.request.Request(url=URL,
headers={'Content-Type':'text/xml', 'Connection':'Keep-Alive'},
data=DATA.encode('gbk'))
respResult = opener.open(resp)
# START
code = respResult.getcode()
if code == 200:
SUCC += 1
else:
FAIL += 1
if code in CODE_MAP.keys():
CODE_MAP[code] += 1
else:
CODE_MAP[code] = 1
# print(request.status)
# END
html = respResult.read().decode('gbk')
print(html)
time_span = time.time() - st #
#
TIME_LIST.append(round(time_span * 1000))
# print('%-13s: %f ' %(self.name, time_span))
self.maxtime(time_span)
self.mintime(time_span)
self.writeToFile(html)
# info = respResult.info() #
# url = respResult.geturl() # URL
# print(info);
# print(url)
COUNT_TIME += time_span
TOTAL += 1
except Exception as e:
print(e)
TOTAL += 1
EXCEPT += 1
# ,
def maxtime(self, ts):
global MAXTIME
#print("time:%f" %(ts))
if ts > MAXTIME:
MAXTIME = ts
# ,
def mintime(self, ts):
global MINTIME
#print("time:%f" %(ts))
if ts < MINTIME and ts > 0.000000000000000001:
MINTIME = ts
#
def writeToFile(self, html):
f = open(RESULT_FILE, 'w')
f.write(html)
f.write('\r
')
f.close();
# XML
def loadData():
global URL
global DATA
f = open(REQUEST_DATA_FILE, 'r')
URL = "".join(f.readline())
DATA = "".join(f.readlines())
# print(DATA)
f.close()
if __name__ == "__main__":
# print("============ ============")
print("")
#
start_time = time.time()
#
thread_count = 1
loadData() #
i = 0
while i < thread_count:
t = RequestThread("Thread" + str(i))
t.start()
i += 1
t = 0
while TOTAL < thread_count and t < 60:
# print("total:%d, succ:%d, fail:%d, except:%d
" %(TOTAL,SUCC,FAIL,EXCEPT))
print(" ",URL)
t += 1
time.sleep(1)
#
print()
print(" ", URL, " :")
print(" = %d, = %d, = %d, = %d" %(TOTAL, SUCC, FAIL, EXCEPT))
print()
print(" ( ):")
print(" =", int(COUNT_TIME * 1000), "ms", end = '')
print(" =", round(MAXTIME * 1000), "ms", end = '')
print(" =", round(MINTIME * 1000), "ms", end = '')
print(" =", round((COUNT_TIME / thread_count) * 1000), "ms")
print()
print(" ( : ):")
print(" ", CODE_MAP)
print()
print(" ", RESULT_FILE, " ( XML )")
print()
# os.system("pause")
print(TIME_LIST)
input()
설정 파일 은 주로 접근 경 로 를 쉽게 변경 하 는 데 있 습 니 다.그 중에서 SESSIONID 는 Fiddler 에서 패키지 로 가 져 옵 니 다.프로필 원본 파일 은 다음 과 같 습 니 다.(회사 의 프라이버시 를 누설 하지 않 기 위해 데 이 터 는 원본 데이터 가 아니 지만 형식 은 같 습 니 다)
http://127.0.0.1:8888/XXXXXXXXX/httpXmlServlet
<?xml version=“1.0” encoding = “GB2312”?>
<COM>
<REQ name="commodity_query">
<USER_ID>0001</USER_ID>
<COMMODITY_ID>0000</COMMODITY_ID>
<SESSION_ID>4918081208706966071</SESSION_ID>
</REQ>
</COM>
테스트 결 과 는 다음 과 같다.회사 의 보안 요구 로 주소 가 모호 하 게 처리 되 었 고,별도로 출력 된 tradeWebResult.xml 결과 페이지 도 표시 되 지 않 았 습 니 다.
이상 은 개인 적 으로 Python 과정 을 학습 하고 사용 하 는 기록 일 뿐 프로그램 설계 나 부적 절 한 사용 을 피 할 수 없습니다.더 좋 은 의견 이 있 으 면 지적 을 환영 합 니 다.
주:이 코드 개발 환경 은 Python 3.5+windows 로 Python 2.x 환경 에서 테스트 되 지 않 았 습 니 다.
이상 의 Python 3.x Xml 데 이 터 를 기반 으로 한 Http 요청 방법 은 바로 여러분 에 게 공 유 된 모든 내용 입 니 다.여러분 에 게 참고 가 되 었 으 면 좋 겠 습 니 다.여러분 의 많은 응원 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.