Python urllib3 패키지의 사용 설명

urllib3는 Python 3의 HTTP 클라이언트입니다.
Python 표준 라이브러리는 urllib를 제공합니다.Python 2에서 urllib2를 제공합니다.Python 3에서 urllib와 urllib2를 표준 라이브러리 urllib로 재구성하고 urllib3를 별도로 제공했다.

1.urllib3의 특성


스레드 보안
연결 버퍼
클라이언트 SSL/TLS 검증
파일 업로드
재시도 요청
HTTP 리디렉션
gzip 및 deflate encoding 지원
HTTP 및 SOCKS를 지원하는 에이전트

2. 설치


urllib3는 Python 3의 표준 라이브러리가 아닙니다. 따로 설치해야 합니다. pip 명령은 다음과 같습니다.
pip install urllib3

3. 용법


1) HTTP GET 요청

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.status
200
>>> r.data
...
>>> r.headers
...
참고 모든 HTTP 요청은 PoolManager 객체를 통해 전송되어야 연결 버퍼와 스레드 보안 기능을 제공합니다.
모든 요청의 반환 대상은 HTTPResponse 대상입니다. 여기에는 status, 데이터, 헤더 세 가지 속성이 포함되어 있습니다.
2) HTTP POST 요청

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('POST', 'http://httpbin.org/post', fields={'hello': 'Xiangbin'})
>>> r.status
200
>>> r.data
...
>>> r.headers
...
3) JSON 응답 처리

>>> import urllib3
>>> import json
 
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://httpbin.org/ip')
>>> r.data
b'{
"origin": "10.23.1.37"
}
' >>> json.loads(r.data.decode('utf-8')) {'origin': '127.0.0.1'}
주의: json의loads() 방법 사용하기
4) 스트리밍 응답 처리

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://httpbin.org/bytes/1024', preload_content=False)
>>> for chunk in r.stream(32):
...   print(chunk)
...
>>> r.release_conn()
참고: preload_content=False는 흐름 처리 응답 데이터를 표시합니다.
stream () 방법으로 응답 데이터를 읽는 것 외에 read () 방법을 사용할 수 있습니다. 예는 다음과 같습니다.

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://httpbin.org/bytes/1024', preload_content=False)
>>> r.read(4)
b'\x88\x1f\x8b\xe5' 
>>> r.release_conn()
5) 매개변수 요청
>>> r = http.request('GET', 'http://httpbin.org/headers', fields={'hello': 'Xiangbin'}, headers={'X-Something': 'value'})
POST 및 PUT 방법의 경우 다음 예제에서 URL에 추가할 수 있도록 매개변수를 인코딩해야 합니다.

>>> from urllib.parse import urlencode
>>> encoded_args = urlencode({'arg': 'value'})
>>> url = 'http://httpbin.org/post?' + encoded_args
>>> r = http.request('POST', url)
물론fields 매개 변수 형식으로 urllib3가 자동으로 인코딩되는 것이 좋습니다. 예는 다음과 같습니다.
>>> r = http.request('POST', 'http://httpbin.org/post', fields={'hello': 'Xiangbin'})
JSON 모듈을 사용하면 다음과 같은 요청 매개변수를 body 형식으로 보낼 수도 있습니다.

>>> import json
>>> data = {'Hello': 'Xiangbin'}
>>> encoded_data = json.dumps(data).encode('utf-8')
>>> r = http.request('POST', 'http://httpbin.org/post', body=encoded_data, headers={'Content-Type': 'application/json'})
>>> json.loads(r.data.decode('utf-8'))['json']
{'Hello': 'Xiangbin'}
6) 파일 업로드
텍스트 파일

>>> with open('example.txt') as fp:
...   file_data = fp.read()
>>> r = http.request(
...   'POST',
...   'http://httpbin.org/post',
...   fields={
...     'filefield': ('example.txt', file_data, 'text/plain'),
...   })
>>> json.loads(r.data.decode('utf-8'))['files']
{'filefield': '...'}
참고 파일을 업로드하려면 POST 메서드를 사용해야 합니다.
바이너리 파일

>>> with open('example.jpg', 'rb') as fp:
...   binary_data = fp.read()
>>> r = http.request(
...   'POST',
...   'http://httpbin.org/post',
...   body=binary_data,
...   headers={'Content-Type': 'image/jpeg'})
>>> json.loads(r.data.decode('utf-8'))['data']
b'...'
 
추가 정보: Python의 requests 패키지 상세 정보
requests는 Python의 제3자 HTTP 라이브러리로 HTTP 접근이 편리하다.
1.requests의 특성
HTTP 1.1 요청 전송 가능
GET 메소드에 대한 URL 요청 매개 변수를 수동으로 설정할 필요가 없으며, POST 메소드 그룹에 폼 형식을 수동으로 인코딩할 필요가 없습니다.
urllib3를 사용하여 HTTP 요청을 위한 연결 세션 캐시
Python 2.6, 2.7, 3.3-3.7 지원
2. requests 설치
requests는 Python 표준 라이브러리가 아니며 PIP 설치가 필요합니다. 명령은 다음과 같습니다.
pip install requests
설치 절차는 다음과 같습니다.

C:\Sam\works>pip install requests
Collecting requests
 Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)
  100% || 61kB 17kB/s
Collecting certifi>=2017.4.17 (from requests)
 Downloading https://files.pythonhosted.org/packages/18/b0/8146a4f8dd402f60744fa380bc73ca47303cccf8b9190fd16a827281eac2/certifi-2019.9.11-py2.py3-none-any.whl (154kB)
  100% || 163kB 18kB/s
Collecting idna<2.9,>=2.5 (from requests)
 Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
  100% || 61kB 10kB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests)
 Downloading https://files.pythonhosted.org/packages/e0/da/55f51ea951e1b7c63a579c09dd7db825bb730ec1fe9c0180fc77bfb31448/urllib3-1.25.6-py2.py3-none-any.whl (125kB)
  100% || 133kB 32kB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
 Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
  100% || 143kB 48kB/s
Installing collected packages: certifi, idna, urllib3, chardet, requests
Successfully installed certifi-2019.9.11 chardet-3.0.4 idna-2.8 requests-2.22.0 urllib3-1.25.6
You are using pip version 19.0.3, however version 19.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
3. requests 인터페이스
1) Main interfaces

requests.request()
requests.head()
requests.get('url', params={'key1':'value1', 'key2':'value2'},headers={'user-agent': '...'}, cookies={'name1':'value2'})
requests.post('url', data={'key':'value'})
requests.post('url', json={'key':'value'})
requests.post('url', files={'uploaded_file': open('report.xls', 'rb')})
requests.post('url', files={'uploaded_file': ('report.xls', open('report.xls', 'rb'), 'application/excel', {'Expires': '0'})})
requests.post('url', files={'uploaded_file': ('temp.txt', 'one line
two lines
')}) requests.put('url', data={'key':'value'}) requests.patch() requests.delete('url') def getGithub(): github_url = 'https://api.github.com/user/repos' myresponse = requests.get(github_url, auth=('champagne', 'myPassword')) print(myresponse.json()) def postGithub(): github_url = 'https://api.github.com/user/repos' data = json.dumps({'name':'python test', 'description':'a python test repo'}) myresponse = requests.post(github_url, data, auth=('champagne', 'myPassword')) print(myresponse.text)
2) requests.세션 클래스
import requests
requests.Session()
3) requests.Request 클래스
import requests
requests.Request('GET', 'http://httpbin.org/get')
4) requests.PreparedRequest 클래스

import requests
req = requests.Request('GET', 'http://httpbin.org/get')
preq = req.prepare()
5) requests.Response 클래스

import requests
r = requests.get('https://api.github.com/events')
r.headers['content-type'] #'application/json;charset=utf8'
r.url
r.status_code #200==requests.codes.ok
r.encoding #'utf-8' by default
r.raw #raw content
r.text #text content
r.content #binary content
r.json()#json content, recommended
r.cookies['a_key']
참고: json () 방법을 호출하여 결과가 유효한 JSON 데이터가 아닌 경우 ValueError 이상을 내보냅니다.
6) requests.adapters.BaseAdapter 클래스
7) requests.adapters.HTTPAdapter 클래스
requests에서 제공하는 urllib3 사용 HTTP 어댑터
이상의 Python urllib3 패키지의 사용 설명은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 참고 부탁드리고 저희도 많이 사랑해 주세요.

좋은 웹페이지 즐겨찾기