Python 에서 제3자 라 이브 러 리 Requests 라 이브 러 리 의 고급 용법 에 대한 상세 한 설명

1.Requests 라 이브 러 리 설치
pip 를 이용 하여 설치 합 니 다.만약 에 pip 패키지(Python 패키지 관리 도구 로 바 이 두 가 될 지 모 르 겠 습 니 다)를 설치 하거나 환경 을 통합 할 수 있 습 니 다.예 를 들 어Python(x,y)또는 anaconda 를 설치 하면 pip 를 사용 하여 Python 라 이브 러 리 를 설치 할 수 있 습 니 다.

$ pip install requests
설치 가 끝 난 후 기본 적 인 방법 을 살 펴 보 겠 습 니 다.

#get    
 >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
#  get      
 >>> r.status_code
200
#         ,     json  ,utf-8  
 >>> r.headers['content-type']
'application/json; charset=utf8'
 >>> r.encoding
'utf-8'
#        
 >>> r.text
u'{"type":"User"...'
#  json    
 >>> r.json()
 {u'private_gists': 419, u'total_private_repos': 77, ...}
다음은 작은 밤 을 보 겠 습 니 다.

#   
import requests

r = requests.get('http://www.baidu.com')
print type(r)
print r.status_code
print r.encoding
print r.text
print r.cookies
'''        ,             ,   ,    ,Cookies      :'''
<class 'requests.models.Response'>
200
UTF-8
<RequestsCookieJar[]>
http 기본 요청
requests 라 이브 러 리 는 http 의 모든 기본 요청 방식 을 제공 합 니 다.예 를 들 면:

r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options(http://httpbin.org/get)
기본 GET 요청

r = requests.get("http://httpbin.org/get")
#       ,     params   :
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
print r.url

#  :http://httpbin.org/get?key2=value2&key1=value1
JSON 파일 을 요청 하려 면json() 방법 으로 해석 할 수 있 습 니 다.예 를 들 어 자신 이 JSON 파일 을 a.json 이 라 고 쓰 는 등 내용 은 다음 과 같 습 니 다.

["foo", "bar", {
"foo": "bar"
}]
#           :
import requests
r = requests.get("a.json")
print r.text
print r.json()
'''      ,           ,          json()      ,        :'''
["foo", "bar", {
"foo": "bar"
}]
[u'foo', u'bar', {u'foo': u'bar'}]
서버 에서 원본 소켓 응답 을 가 져 오 려 면r.raw을 가 져 올 수 있 습 니 다.단,초기 요청 에 설정 해 야 합 니 다stream=True.

r = requests.get('https://github.com/timeline.json', stream=True)
r.raw
#  
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
이렇게 해서 웹 페이지 의 원본 소켓 내용 을 얻 었 다.
headers 를 추가 하려 면 headers 인 자 를 전달 할 수 있 습 니 다.

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
headers = {'content-type': 'application/json'}
r = requests.get("http://httpbin.org/get", params=payload, headers=headers)
print r.url
#  headers           headers  
3.기본 POST 요청
POST 요청 에 있어 서,우 리 는 일반적으로 그것 을 위해 약간의 인 자 를 추가 해 야 한다.그러면 가장 기본 적 인 전 참 방법 은 data 라 는 인 자 를 이용 할 수 있 습 니 다.

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text
#      :
{
"args": {}, 
"data": "", 
"files": {}, 
"form": {
"key1": "value1", 
"key2": "value2"
}, 
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Content-Length": "23", 
"Content-Type": "application/x-www-form-urlencoded", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}, 
"json": null, 
"url": "http://httpbin.org/post"
}
매개 변수 전송 이 성공 한 것 을 볼 수 있 고 서버 가 우리 가 보 낸 데 이 터 를 되 돌려 주 었 습 니 다.
때때로 우리 가 전송 해 야 할 정 보 는 폼 형식 이 아니 라 JSON 형식의 데 이 터 를 전송 해 야 하기 때문에 우 리 는json.dumps() 방법 으로 폼 데 이 터 를 직렬 화 할 수 있다.

import json
import requests

url = 'http://httpbin.org/post'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))
print r.text

#    :
{
"args": {}, 
"data": "{\"some\": \"data\"}", 
"files": {}, 
"form": {}, 
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Content-Length": "16", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}, 
"json": {
"some": "data"
}, 
"url": "http://httpbin.org/post"
}
상술 한 방법 을 통 해 우 리 는 POST JSON 형식의 데 이 터 를 얻 을 수 있다.
파일 을 업로드 하려 면 파일 매개 변 수 를 직접 사용 하면 됩 니 다.

#     test.txt    ,     Hello World!
import requests

url = 'http://httpbin.org/post'
files = {'file': open('test.txt', 'rb')}
r = requests.post(url, files=files)
print r.text

{
"args": {}, 
"data": "", 
"files": {
"file": "Hello World!"
}, 
"form": {}, 
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Content-Length": "156", 
"Content-Type": "multipart/form-data; boundary=7d8eb5ff99a04c11bb3e862ce78d7000", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}, 
"json": null, 
"url": "http://httpbin.org/post"
}
이렇게 해서 우 리 는 파일 업로드 에 성공 했다.
requests 는 스 트림 업 로드 를 지원 합 니 다.메모리 에 읽 지 않 고 큰 데이터 흐름 이나 파일 을 보 낼 수 있 습 니 다.스 트림 업 로드 를 사용 하려 면 요청 체 에 클래스 파일 대상 을 제공 하면 됩 니 다.매우 편리 합 니 다.

with open('massive-body') as f:
requests.post('http://some.url/streamed', data=f)
4.쿠키
만약 에 하나의 응답 에 쿠키 가 포함 되 어 있다 면 저 희 는 cookies 변 수 를 이용 하여 얻 을 수 있 습 니 다.

import requests

url = 'Example Domain'
r = requests.get(url)
print r.cookies
print r.cookies['example_cookie_name']
상기 프로그램 은 사례 일 뿐 cookies 변수 로 사이트 의 cookies 를 얻 을 수 있 습 니 다.
또한 cookies 변 수 를 이용 하여 서버 에 cookies 정 보 를 보 낼 수 있 습 니 다.

import requests

url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
print r.text
#  :
'{"cookies": {"cookies_are": "working"}}'
5.시간 초과 설정
timeout 변 수 를 이용 하여 최대 요청 시간 을 설정 할 수 있 습 니 다.

requests.get(‘Build software better, together', timeout=0.001)
주:timeout 은 연결 과정 에 만 유효 하 며 응답 체 의 다운로드 와 는 무관 합 니 다.
이 시간 은 요청 한 시간 만 제한 한 다 는 것 이다.되 돌아 오 는 response 가 큰 내용 을 포함 하 더 라 도 다운로드 하 는 데 시간 이 걸 립 니 다.
6.회화 대상
이상 의 요청 에서 매번 요청 은 사실 새로운 요청 을 한 것 과 같다.모든 요청 이 다른 브 라 우 저 로 단독으로 열 리 는 효과 에 해당 합 니 다.같은 주 소 를 요청 하 더 라 도 세 션 을 가리 키 는 것 이 아니다.예 를 들 면:

import requests

requests.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = requests.get("http://httpbin.org/cookies")
print(r.text)
#   :
{
"cookies": {}
}
분명히 이것 은 세 션 이 아니 라 cookies 를 가 져 올 수 없습니다.그러면 일부 사이트 에서 우 리 는 지속 적 인 세 션 을 유지 해 야 합 니 다.어떻게 해 야 합 니까?타 오 바 오 를 브 라 우 저 로 돌아 다 니 는 것 처럼 서로 다른 옵션 사이 에서 뛰 어 다 니 는 것 은 오 랜 세 션 을 만 드 는 것 이다.
해결 방안 은 다음 과 같다.

import requests

s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)
#          ,      cookies,      cookies
{
"cookies": {
"sessioncookie": "123456789"
}
}
cookies 를 성공 적 으로 얻 을 수 있 음 을 발 견 했 습 니 다.이것 이 바로 세 션 을 만 드 는 데 도움 이 됩 니 다.
세 션 이 전역 적 인 변수 인 이상 전역 적 인 설정 에 사용 할 수 있 을 것 입 니 다.

import requests

s = requests.Session()
s.headers.update({'x-test': 'true'})
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print r.text
'''   s.headers.update       headers    。                headers,         ?   ,          。     :'''
{
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1", 
"X-Test": "true", 
"X-Test2": "true"
}
}
get 방법 으로 전 달 된 headers 도 x-test 라면?

r = s.get('http://httpbin.org/headers', headers={'x-test': 'true'})

#          :
{
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1", 
"X-Test": "true"
}
}
전역 설정 의 변 수 를 원 하지 않 는 다 면?간단 합 니 다.None 로 설정 하면 됩 니 다.

r = s.get('http://httpbin.org/headers', headers={'x-test': None})
{
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}
}
이상 은 session 세 션 세 션 의 기본 용법 입 니 다.
7.SSL 인증서 검증
현재 https 로 시작 하 는 웹 사 이 트 를 곳곳에서 볼 수 있 습 니 다.Requests 는 웹 브 라 우 저 처럼 HTTPS 에 SSL 인증 서 를 요청 할 수 있 습 니 다.어떤 호스트 의 SSL 인증 서 를 검사 하려 면 verify 인 자 를 사용 할 수 있 습 니 다.얼마 전에 12306 인증서 가 잘못 되 었 잖 아 요.테스트 해 보 세 요.

import requests

r = requests.get('https://kyfw.12306.cn/otn/', verify=True)
print r.text
#  :
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
github 의:

import requests

r = requests.get('Build software better, together', verify=True)
print r.text
응,정상 적 인 요청 이 야.내용 이 너무 많아 서 출력 을 붙 이지 않 을 거 야.
방금 12306 인증 서 를 건 너 뛰 려 면 verify 를 False 로 설정 하면 됩 니 다.

import requests

r = requests.get('https://kyfw.12306.cn/otn/', verify=False)
print r.text
발견 하면 정상적으로 요청 할 수 있 습 니 다.기본 적 인 상황 에서 verify 는 True 이기 때문에 필요 하 다 면 이 변 수 를 수 동 으로 설정 해 야 합 니 다.
대리
프 록 시 를 사용 하려 면 임의의 요청 방법 에 proxies 인 자 를 제공 하여 하나의 요청 을 설정 할 수 있 습 니 다.

import requests

proxies = {
"https": "http://41.118.132.69:4433"
}
r = requests.post("http://httpbin.org/post", proxies=proxies)
print r.text
#          HTTP_PROXY   HTTPS_PROXY      
export HTTP_PROXY="http://10.10.1.10:3128"
export HTTPS_PROXY=http://10.10.1.10:1080
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기