>백엔드 개발 >파이썬 튜토리얼 >Python의 요청 모듈 사용에 대한 자세한 설명

Python의 요청 모듈 사용에 대한 자세한 설명

巴扎黑
巴扎黑원래의
2017-09-19 11:12:451315검색

Requests 모듈은 네트워크 액세스에 사용되는 모듈입니다. 실제로 urllib, urllib2, httplib, httplib2 등 유사한 모듈이 많이 있습니다. 기본적으로 비슷한 기능을 제공하는데 Requests 모듈이 눈에 띄는 이유는 무엇입니까? 공식 웹사이트를 열어서 살펴보세요. "인간"을 위한 http 모듈입니다. 그렇다면 얼마나 인간적인가? 나는 이전에 urllib와 같은 모듈을 사용해 본 적이 있다면 그것이 실제로 매우 사용자 친화적이라는 것을 알게 될 것이라고 믿습니다.

1. 가져오기

다운로드가 완료된 후 모듈을 가져오는 것은 매우 간단합니다. 코드는 다음과 같습니다.

import requests

2. URL 요청

여기에는 get 또는 post 요청을 보내는 데 가장 일반적인 구문이 나열되어 있습니다.

1. 매개변수 없이 get 요청 보내기:

r=requests.get("http://php.cn/justTest")

이제 응답 객체 r을 얻었습니다. 이 객체를 사용하여 원하는 정보를 얻을 수 있습니다.

위의 예에서 get 요청에는 매개변수가 없습니다. 요청에 매개변수가 필요한 경우에는 어떻게 되나요?

2. 매개변수와 함께 get 요청 보내기

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://php.cn/justTest", params=payload)

위에서 알 수 있듯이 get 매개변수는 params 키워드 매개변수로 전달됩니다.

요청된 특정 URL을 인쇄하여 올바른지 확인할 수 있습니다.

>>>print r.url
http://php.cn/justTest?key2=value2&key1=value1

실제로 올바른 URL에 액세스했음을 확인할 수 있습니다.

요청 매개변수에 목록을 전달할 수도 있습니다.

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get("http://php.cn/justTest", params=payload)
>>> print r.url
http://php.cn/justTest?key1=value1&key2=value2&key2=value3

위는 get 요청의 기본 형식입니다.

3. 게시물 요청 보내기

r = requests.post("http://php.cn/postTest", data = {"key":"value"})

위에서 볼 수 있듯이 게시물 요청 매개변수는 데이터 키워드 매개변수와 함께 전달됩니다.

현재 데이터 매개변수는 다음과 같이 json 형식 데이터를 전달할 수도 있습니다.

>>> import json
>>> import requests
>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", data = json.dumps(payload))

json 형식 데이터를 보내는 것이 너무 일반적이므로 json 키가 요청의 상위 버전에 추가되었습니다. module.Word 매개변수를 사용하면 json 모듈을 사용하지 않고 json 데이터를 게시 요청에 직접 보낼 수 있습니다. 아래를 참조하세요.

>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", json=payload)

파일을 게시하려면 어떻게 해야 하나요? 이때 파일 매개변수를 사용해야 합니다:

>>> url = 'http://php.cn/postTest'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
>>> r.text

파일을 게시할 때 파일 이름과 기타 추가 정보를 지정할 수도 있습니다:

>>> url = 'http://php.cn/postTest'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
>>> r = requests.post(url, files=files)

팁: 파일을 열려면 바이너리 모드를 사용하는 것이 좋습니다. 왜냐하면 텍스트 파일 형식으로 열 경우 "Content-Length" 헤더로 인해 오류가 발생할 수 있습니다.

보시다시피 요청을 사용하여 요청을 보내는 것은 간단합니다!

3. 반품 정보 가져오기

요청을 보낸 후 반품 정보를 가져오는 방법을 살펴보겠습니다. 계속해서 맨 위의 예를 사용해 보겠습니다.

>>> import requests
>>> r=requests.get('http://php.cn/justTest')
>>> r.text

r.text는 어떤 인코딩 형식으로 출력되나요?

>>> r.encoding
'utf-8'

utf-8 형식으로 출력되는 것으로 나타났습니다. r.text의 출력 형식을 변경하려면 어떻게 해야 합니까?

>>> r.encoding = 'ISO-8859-1'

이렇게 하면 출력 형식이 "ISO-8859-1"로 변경됩니다.

r.content라는 출력문도 있는데, r.text와 차이점이 뭔가요? r.content는 이미지 주소를 요청하고 이미지를 저장하려는 경우 사용할 수 있는 바이트 스트림을 반환합니다. 다음은 다음과 같은 코드 조각입니다.

def saveImage( imgUrl,imgName ="default.jpg" ):
    r = requests.get(imgUrl, stream=True)
    image = r.content
    destDir="D:\"
    print("保存图片"+destDir+imgName+"\n")
    try:
        with open(destDir+imgName ,"wb") as jpg:
            jpg.write(image)     
            return
    except IOError:
        print("IO Error")
        return
    finally:
        jpg.close

방금 소개한 r.text는 문자열을 반환합니다. 요청에 해당하는 응답이 json인데, json 형식으로 데이터를 직접 가져올 수 있나요? 이를 위해 r.json()이 준비되어 있습니다.

서버에서 반환된 원본 데이터를 얻을 수도 있습니다. r.raw.read()를 사용하면 됩니다. 그러나 원본 반환 데이터를 정말로 얻으려면 요청할 때 "stream=True" 옵션을 추가해야 합니다. 예:

r = requests.get('https://api.github.com/events', stream=True)。

응답 상태 코드를 얻을 수도 있습니다:

>>> r = requests.get('http://php.cn/justTest')
>>> r.status_code
200

요청을 사용할 수도 있습니다. ok는 반환 값 200을 나타냅니다:

>>> r.status_code == requests.codes.ok
True

4. 헤더와 관련하여

응답 헤더를 인쇄할 수 있습니다:

>>> r= requests.get("http://php.cn/justTest")
>>> r.headers

`r.headers`는 사전을 반환합니다. 예:

{
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '147ms',
    'etag': '"e1ca502697e5c9317743dc078f67693a"',
    'content-type': 'application/json'
}

판단을 위해 응답 헤더를 가져오는 다음 방법:

r.headers['Content-Type']

또는

r.headers.get('Content-Type')

요청 헤더(즉, 서버에 보내는 헤더 정보)를 가져오려면 어떻게 해야 할까요? r.request.headers를 사용하여 직접 얻을 수 있습니다.

동시에 데이터를 요청할 때 사용자 정의 헤더(헤더 키워드 매개변수를 통해 전달됨)를 추가할 수도 있습니다.

>>> headers = {'user-agent': 'myagent'}
>>> r= requests.get("http://php.cn/justTest",headers=headers)

5. 쿠키 정보

응답에 쿠키가 포함된 경우 다음 방법을 사용하여 쿠키를 얻을 수 있습니다.

>>> url = 'http://www.php.cn'
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
'example_cookie_value'

저희는 자체 쿠키를 보낼 수도 있습니다(쿠키 키워드 매개변수 사용):

>>> url = 'http://php.cn/cookies'
>>> cookies={'cookies_are':'working'}
>>> r = requests.get(url, cookies=cookies)

6. 리디렉션 정보

때때로 URL을 요청할 때 서버는 자동으로 요청을 리디렉션합니다. 예를 들어 github에서는 http 요청을 https로 리디렉션합니다. 요구. r.history를 사용하여 리디렉션을 볼 수 있습니다.

>>> r = requests.get('http://php.cn/')
>>> r.url
'http://pythontab.com/'
>>> r.history
[]

위의 예에서 볼 수 있듯이 액세스에는 http 프로토콜을 사용하지만 r.url에는 https 프로토콜이 인쇄됩니다. 그렇다면 서버가 http 프로토콜을 사용하도록 요구하면 어떻게 해야 합니까? 이는 서버가 자동으로 리디렉션되는 것을 금지한다는 의미입니다. Allow_redirects 매개변수 사용:

r = requests.get('http://php.cn', allow_redirects=False)

7. 요청 시간 정보

timeout 매개변수를 사용하여 URL의 요청 시간 초과를 설정할 수 있습니다(시간 단위는 초):

requests.get('http://php.cn', timeout=1)

8. 프록시 정보

또한 다음을 수행할 수 있습니다. 다음과 같이 http 또는 https 액세스를 위해 프로그램 프록시에서 이를 지정합니다(proxies 키워드 매개변수 사용).

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
requests.get("http://php.cn", proxies=proxies)

九、关于session

我们有时候会有这样的情况,我们需要登录某个网站,然后才能请求相关url,这时就可以用到session了,我们可以先使用网站的登录api进行登录,然后得到session,最后就可以用这个session来请求其他url了:

s=requests.Session()
login_data={'form_email':'youremail@example.com','form_password':'yourpassword'}
s.post("http://php.cn/testLogin",login_data)
r = s.get('http://php.cn/notification/')
print r.text

其中,form_email和form_password是豆瓣登录框的相应元素的name值。

十、下载页面

使用Requests模块也可以下载网页,代码如下:

r=requests.get("http://www.php.cn")
with open("haha.html","wb") as html:
    html.write(r.content)
html.close()

위 내용은 Python의 요청 모듈 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.