Python 에서 제3자 라 이브 러 리 Requests 라 이브 러 리 의 고급 용법 에 대한 상세 한 설명
12398 단어 python요청 라 이브 러 리사용법
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
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.