[Python] Python http 프로 그래 밍: urllib 패키지 와 http 패키지 상세 설명
글 은 세 부분 으로 나 뉘 는데 첫 번 째 부분 은 python 이 제공 하 는 라 이브 러 리 의 지원 을 설명 하고 두 번 째 부분 은 간단 한 사용 장면 을 설명 하 며 세 번 째 부분 은 제 가 유용 하 다 고 생각 하 는 링크 입 니 다. 공식 적 인 튜 토리 얼 과 깊이 있 는 소개 자 료 를 포함 합 니 다.
python 라 이브 러 리 소개
웹 엔 드 프로 그래 밍 에 주로 사용 되 는 라 이브 러 리 는 두 개 입 니 다.
하 나 는 url 요청 과 관련 된 가방 urllib 입 니 다. 주로 다음 과 같 습 니 다.
다른 하 나 는 http 프로 토 콜 처리 와 관련 된 http 패키지 입 니 다. 주로 다음 과 같 습 니 다.
다음은 각 창고 에 대해 상세 하 게 소개 하 겠 습 니 다.
urllib 라 이브 러 리 상세 설명
python 3 이전에 urllib and urllib 2 두 개의 라 이브 러 리 가 존재 하여 url 요청 을 처리 합 니 다.그러나 python 3. X 이후 두 라 이브 러 리 는 하나의 urllib 로 합 쳐 졌 다.urllib 아래 의 서브 라 이브 러 리 는 모두 하나의 url 과 직접 또는 간접 적 으로 접촉 하거나 일정한 관계 가 있다.예 를 들 어 url. error 라 이브 러 리 에서 제공 하 는 클래스 와 인 터 페 이 스 는 모두 url 에서 던 진 오 류 를 열 고 있 으 며, url. request 에서 제공 하 는 클래스 와 인 터 페 이 스 는 하나의 url 을 통 해 직접 요청 합 니 다.다음은 모든 서브 라 이브 러 리 에 대해 간단하게 설명 하 겠 습 니 다.
urllib. request 는 url 라 이브 러 리 에서 가장 중요 하고 복잡 하 며 가장 많은 인 터 페 이 스 를 제공 하 는 라 이브 러 리 입 니 다.그것 은 요청 의 발송, 점프, 대리, 안전 등 여러 가지 측면 을 포함한다.현재 http, https, ftp 와 로 컬 파일 에 대한 열기 지원 만 제 공 했 을 뿐 다른 프로 토 콜 은 실현 되 지 않 았 습 니 다.urllib. request 는 urllib 라 이브 러 리 아래 에서 가장 중요 한 것 이기 때문에 우 리 는 이 라 이브 러 리 를 중심 으로 소개 합 니 다.urllib. request
알파벳 소문 자 시작 에 주의 하 세 요) request 의 가장 중요 한 역할 은 당신 이 제공 한 url 에 따라 이 url 을 요청 하고 요청 결 과 를 되 돌려 주 는 것 입 니 다.구체 적 인 유형 은 아래 캡 처 를 참고 하 십시오.
여기 서 위의 그림 과 결합 하여 먼저 request 중의 기본 개념 을 소개 합 니 다.request 에는 handler, opener, processor 의 몇 가지 대상 유형 이 존재 합 니 다.opener 는 구체 적 인 URL 을 요청 하거나 해당 하 는 파일 을 엽 니 다. handler 는 주로 성명 의 처리 방식 입 니 다.예 를 들 어 HttpHandler 나 FTPHandler 를 사용 하 라 는 요청 을 열 수 있 습 니 다. opener 가 특정한 URL 을 열 었 을 때 설명 한 handler 에서 제공 하 는 방법 에 python 이 제공 하 는 기본 handler 를 추가 하 는 것 은 위 에서 캡 처 한 Handler 로 끝 나 는 클래스 입 니 다.성명 과 초기 화 할 때 사용 할 handler 를 설명 하지 않 으 면 opener 는 모든 기본 handler 만 사용 합 니 다.processor 에 HTTP CookieProcessor (쿠키 처리 담당, http 라 이브 러 리 의 인터페이스 호출) 와 HTTP ErrorProcessor (요청 한 오류 처리 담당) 가 존재 합 니 다.
이 url 을 어떻게 요청 하 는 지, 요청 할 때 인자 가 필요 한 지, 대리 가 필요 한 지, request 가 제공 하 는 방법 으로 이 작업 을 수행 할 수 있 습 니 다.물론 request 는 operner 와 handler 등 바 텀 콘 텐 츠 를 많이 밀봉 해 주 었 습 니 다.http 요청 이 request 의 인 터 페 이 스 를 통 해 어떻게 보 내 는 지 소개 합 니 다.
req = urllib.request.Request("http://weibo.com/")
data = urllib.request.urlopen(req)
#data = urllib.request.urlopen("http://weibo.com/")
for d in data.readlines():
print(str(d,encoding = "utf-8"))
request 가 대외 적 으로 제공 하 는 인 터 페 이 스 는 urlopen 방법 입 니 다. 이 방법 은 순수한 문자열 형식의 url (주석 부분, Request 대상 도 받 아들 일 수 있 습 니 다 (
대문자 주의). 문자열 을 전달 할 때 request 에 서 는 문자열 을 Request 대상 으로 봉인 하 는 기본 방법 이 있 습 니 다. 마지막 으로 request 방법 을 opener 에 전달 하 는 open 방법 입 니 다. open 방법 에 서 는 설명 한 handler 나 기본 handler 를 사용 하여 구체 적 인 URL 을 요청 합 니 다. 이것 은 가장 간단 한 처리 과정 입 니 다. 복잡 한 응용 장면 은 아래 에 있 습 니 다.장면 분석 으로 설명 하 세 요. urlopen 방법 은 아래 소스 코드 를 보 세 요.
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
*, cafile=None, capath=None, cadefault=False):
global _opener
if cafile or capath or cadefault:
if not _have_ssl:
raise ValueError('SSL support not available')
context = ssl._create_stdlib_context(cert_reqs=ssl.CERT_REQUIRED,
cafile=cafile,
capath=capath)
https_handler = HTTPSHandler(context=context, check_hostname=True)
opener = build_opener(https_handler)
elif _opener is None:
_opener = opener = build_opener()
else:
opener = _opener
return opener.open(url, data, timeout)
위 를 통 해 알 수 있 듯 이 urlopen 방법 을 호출 할 때 구체 적 인 바 텀 호출 순 서 는 다음 과 같다.
요청 형식 에 따라 HTTPS 나 HTTP 에 필요 한 대상 을 구성 합 니 다. - > opener 를 호출 하거나 생 성 합 니 다. > opener 를 통 해 open 방법 을 호출 하여 연결 을 엽 니 다. 구체 적 인 open 방법 은 아래 소스 코드 와 같 습 니 다.
모든 handler 는 http 라 이브 러 리 의 인 터 페 이 스 를 호출 하여 요청 한 처 리 를 완료 합 니 다.
httplib 라 이브 러 리 상세 설명
urllib 라 이브 러 리 에 비해 httplib 라 이브 러 리 는 http 프로 토 콜 과 직접 접촉 할 수 있 는 기 회 를 제공 합 니 다. python 3 이전 에는 httplib 라 는 이름 이 었 으 나 3 후 에는 모든 라 이브 러 리 가 http. client 로 이름 을 바 꿉 니 다.
url lib 라 이브 러 리 에서 많은 인 터 페 이 스 는 링크 의 구축, 요청 의 발송, 되 돌아 오 는 상태 코드 의 전환 여부, 해당 내용 을 가 져 오 는 등 바 텀 패 키 지 를 제공 합 니 다. 그러나 http 라 이브 러 리 에서 이 물건 들 은 개발 자 들 이 인 터 페 이 스 를 명시 적 으로 호출 하여 처리 해 야 합 니 다. 두 가지 인터페이스 차이 가 크 지만 각각 사용 장소 가 있 습 니 다. url lib 는 많은 물건 을 필요 로 하지 않 습 니 다.고려 해 야 한다. 사실 그의 밑바닥 의 많은 실현 은 http 라 이브 러 리 를 호출 하여 이 루어 진다. 구체 적 으로 그 방식 으로 개발 하고, 당신 의 프로젝트 와 당신 의 응용 장면 (이동 SO 에서 이 두 가지 에 대한 대답) 을 겨냥 해 야 한다.. 주의해 야 할 것 은 urllib 를 사용 할 때 주 소 를 열 때 링크 를 만들어 야 한 다 는 것 입 니 다. 이 부분 은 지연 이 있 을 수 있 습 니 다. 따라서 지연 에 대해 어느 정도 요구 하 는 화 라면 다 중 스 레 드 를 이용 하지 않 으 면 사용 장면 에 만족 하지 않 을 수 있 습 니 다.
http 패 키 지 를 통 해 네트워크 프로 그래 밍 을 하려 면 http. client 패키지 아래 의 HTTP Connection, HTTP Response 두 개의 라 이브 러 리 를 주의해 야 합 니 다. HTTP Connection 에 대해 서 는 링크 를 만 들 거나 요청 을 보 내 는 등 작업 을 합 니 다. HTTP Response 는 패키지 요청 의 결 과 를 되 돌려 주 는 라 이브 러 리 입 니 다. 간단 한 요청 에 대해 서 는 다음 과 같이 예시 합 니 다.
import http.client
conn = http.client.HTTPConnection("www.baidu.com")
conn.request("GET", "/index.html")
r1 = conn.getresponse()# HTTPResponse
그러나 프 록 시 를 어떻게 사용 하 는 지 구체 적 으로 찾 지 못 했 습 니 다. 3. X 이전 버 전의 프 록 시 코드 를 사용 하여 테스트 를 하 는 것 은 정상적으로 작 동 하지 않 습 니 다. 프 록 시 를 사용 하 는 구체 적 인 진전 이 있 으 면 다시 업데이트 되 거나 친구 가 사용 한 적 이 있 으 면 답장 을 할 수 있 습 니 다.
url lib 라 이브 러 리 에 비해 http 라 이브 러 리 는 클 라 이언 트 가 요청 한 인터페이스 뿐만 아니 라 서버 엔 드 의 인터페이스 도 제공 합 니 다. http. server 를 사용 하면 간단 한 웹 서버 를 실현 하여 웹 요청 을 받 아들 일 수 있 습 니 다. 그러나 이 인 터 페 이 스 는 상당히 간단 합 니 다. 확장 성과 높 은 동시 방문 에 한계 가 있 습 니 다. 이 밖 에 데 이 터 를 되 돌려 주 는 렌 더 링 에 도 한계 가 있 습 니 다.클 라 이언 트 와 서버 측 데이터 의 상호작용 의 복잡성 도 개발 자가 수행 해 야 합 니 다. 생산 효율 이 매우 낮 기 때문에 현재 많은 프레임 워 크 가 이미 봉인 이상 의 고려 가 있어 개발 자가 업무 개발 에 집중 할 수 있 습 니 다. 예 를 들 어 작은 webpy 와 매우 유행 하 는 Django 가 있 습 니 다. 더 자세 한 자 료 는 아래쪽 링크 를 보십시오.
현재 python 을 사용 하여 간단 한 http 프로 그래 밍 을 할 때, 예 를 들 어 파충 류 는 http 가방 의 인 터 페 이 스 를 거의 사용 하지 않 습 니 다. 대부분 urllib 라 이브 러 리 를 직접 사용 합 니 다. 아래 의 구체 적 인 예 는 urllib 라 이브 러 리 를 기반 으로 합 니 다.
응용 예시
http 라 이브 러 리 의 사용 이 그리 많 지 않 기 때문에 이곳 의 응용 은 모두 urllib 라 이브 러 리 의 응용 예 시 를 바탕 으로 합 니 다.
단순 한 부탁
req = urllib.request.Request("http://weibo.com/")
data = urllib.request.urlopen(req)
for d in data.readlines():
print(str(d,encoding = "utf-8"))
이것 은 가장 간단 한 요청 을 보 내 는 방식 입 니 다. Request 대상 을 만 든 다음 인 터 페 이 스 를 호출 하여 요청 을 보 내 고 데 이 터 를 되 돌려 주 며 읽 은 데 이 터 는 바이트 형식 입 니 다. 마지막 으로 바이트 데 이 터 를 utf - 8 을 통 해 문자열 출력 결과 로 바 꿉 니 다.사용 에이전트
proxy_url="http://XXX.com:port/"
proxy_handler = urllib.request.ProxyHandler({'http': proxy_url})
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)
req = urllib.request.Request("http://weibo.com/")
data = urllib.request.urlopen(req)
이것 은 프 록 시 를 사용 하 는 요청 코드 입 니 다. 프 록 시 를 미리 설명 한 다음 Handler 를 만 들 고 이 handler 를 opener 에서 설명 합 니 다. 마지막 으로 opener 인 터 페 이 스 를 호출 하여 기본 opener 를 덮어 씁 니 다. 이때 연결 을 열 때 우리 구조의 opener 를 호출 합 니 다. 이에 따라 opener 가 연결 을 열 었 을 때 조정 할 수 있 습 니 다.프 록 시 handler 로 구체 적 인 요청 을 처리 합 니 다. 프 록 시 handler 를 구성 할 때 사전 이 필요 합 니 다. 사전 의 key 는 프 록 시 형식 을 설명 합 니 다. 본 고 는 http 입 니 다. 사전 의 value 는 프 록 시 주소 와 포트 번호 로 구 성 된 문자열 입 니 다.전달 매개 변수
param= urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
param= param.encode('utf-8')
request = urllib.request.Request("http://weib.com")
request.add_header("Content-Type","application/x-www-form-urlencoded;charset=utf-8")
data = urllib.request.urlopen(request, param)
전달 할 인 자 를 map 형식 으로 urlencode 를 통 해 인 코딩 한 다음 utf - 8 을 통 해 인 코딩 합 니 다.부록
Use Python in the web:http://docs.python.org/3.2/howto/webservers.html
Using The urllib Package:http://docs.python.org/3.2/howto/urllib2.html
webpy:http://webpy.org/
Django:https://www.djangoproject.com/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fortinet FortiWeb Web Application Firewall Policy BypassFrom: Geffrey Velasquez Date: Wed, 2 May 2012 20:33:23 -0500...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.