python3 요청 모듈 게시 요청 네 가지 방법

6145 단어
HTTP 프로토콜은 POST에 의해 제출된 데이터가 메시지 본문(entity-body)에 있어야 한다고 규정하지만 프로토콜은 데이터가 사용해야 하는 인코딩을 규정하지 않습니다. 네 가지 일반적인 인코딩 방법은 다음과 같습니다.
1. application/x-www-form-urlencoded
이것은 POST를 통해 데이터를 제출하는 가장 일반적인 방법이어야 합니다. enctype 속성이 설정되지 않은 경우 브라우저의 기본 형식은 결국 application/x-www-form-urlencoded에 데이터를 제출합니다. 요청은 다음과 같습니다(관련 없는 요청 헤더는 이 문서에서 생략됨).
POST http://www.example.com HTTP/1.1    Content-Type:
application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
2. 멀티파트/폼 데이터
전통적인 application/x-www-form-urlencoded 형식 외에도 우리가 자주 사용하는 또 다른 형식은 multipart/form-data 유형의 파일 업로드 형식입니다. 이것은 POST 데이터 제출의 또 다른 일반적인 방법입니다. 양식을 사용하여 파일을 업로드할 때 양식의 enctyped를 이 값과 동일하게 만들어야 합니다. 다음은 예입니다.
다음으로 게시물 요청의 본문을 보내는 네 가지 방법에 대해 이야기해 보겠습니다.
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
3. application/json application/json의 Content-Type은 응답 헤더로 누구에게나 친숙합니다. 실제로 점점 더 많은 사람들이 메시지 본문이 직렬화된 JSON 문자열임을 서버에 알리기 위해 요청 헤더로 이를 사용하고 있습니다. JSON 사양의 인기로 인해 Low-level IE를 제외한 모든 주요 브라우저는 기본적으로 JSON.stringify를 지원하며, 서버측 언어에도 JSON을 처리하는 기능이 있으므로 JSON을 사용해도 문제는 없다.​​
4. text/xml HTTP를 전송 프로토콜로 사용하고 XML을 인코딩 방식으로 사용하는 원격 호출 사양입니다.
 
 

게시물 요청의 본문을 보내는 네 가지 방법이 있습니다.


(1) 요청 본문은 application/x-www-form-urlencoded입니다.
(2) 요청 본문이 multipart/form-data입니다.
(3) 요청 본문이 원시입니다.
(4) 요청 본문이 바이너리입니다.
(1) 요청 본문은 application/x-www-form-urlencoded입니다.
형태:
requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'application/x-www-form-urlencoded'})
Reqeusts는 양식의 형태로 게시 요청을 보내는 것을 지원합니다.요청의 매개변수를 사전에 구성한 다음 requests.post()의 data파라미터에 전달하기만 하면 됩니다.
입력하다:
url = 'http://httpbin.org/post'
d = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=d)
print(r.text)
산출:
{ 
“args”: {}, 
“data”: “”, 
“files”: {}, 
“form”: { 
“key1”: “value1”, 
“key2”: “value2” 
}, 
“headers”: { 
…… 
“Content-Type”: “application/x-www-form-urlencoded”, 
…… 
}, 
“json”: null, 
…… 
}
요청 헤더의 Content-Type 필드가 application/x-www-form-urlencoded로 설정되어 있고 d = {'key1': 'value1', 'key2': 'value2'}가 양식의 형태로 서버에 제출된 것을 알 수 있습니다. 서버는 제출된 데이터입니다.
(2) 요청 본문이 multipart/form-data입니다.
기존의 application/x-www-form-urlencoded 형식 외에도 우리가 자주 사용하는 또 다른 형식은 파일 업로드 형식입니다. 이 형식의 유형은 multipart/form-data입니다.
형태:
requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'multipart/form-data'})
파일로 데이터를 전송하는 데 필요(install requests_toolbelt)
from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
    )

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
문서가 필요하지 않음
from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(fields={'field0': 'value', 'field1': 'value'})

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
(3) 요청 본문이 원시입니다.
형태:
들어오는 xml 형식의 텍스트
requests.post(url='',data='',headers={'Content-Type':'text/xml'})
들어오는 json 형식의 텍스트
requests.post(url='',data=json.dumps({'key1':'value1','key2':'value2'}),headers={'Content-Type':'application/json'})
또는:
requests.post(url='',json={{'key1':'value1','key2':'value2'}},headers={'Content-Type':'application/json'})
json 문자열을 requests.post()의 데이터 매개변수에 전달할 수 있습니다.
입력하다:
url = 'http://httpbin.org/post'
s = json.dumps({'key1': 'value1', 'key2': 'value2'})
r = requests.post(url, data=s)
print(r.text)
산출:
{ 
“args”: {}, 
“data”: “{\”key2\”: \”value2\”, \”key1\”: \”value1\”}”, 
“files”: {}, 
“form”: {}, 
“headers”: { 
…… 
“Content-Type”: “application/json”, 
…… 
}, 
“json”: { 
“key1”: “value1”, 
“key2”: “value2” 
}, 
…… 
}
(4) 요청 본문이 바이너리입니다.
형태:
requests.post(url='',files={'file':open('test.xls','rb')},headers={'Content-Type':'binary'})
요청은 또한 multipart 형식으로 게시 요청을 보내는 것을 지원합니다. requests.post()의 files 입력하다:
url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
print(r.text)
산출:
{ 
“args”: {}, 
“data”: “”, 
“files”: { 
“file”: “Hello world!” 
}, 
“form”: {}, 
“headers”: {…… 
“Content-Type”: “multipart/form-data; boundary=467e443f4c3d403c8559e2ebd009bf4a”, 
…… 
}, 
“json”: null, 
…… 
}
report.txt 텍스트 파일의 내용은 Hello world!라는 한 줄로 되어 있으며, 요청에 대한 응답 결과에서 서버에 데이터가 업로드되었음을 알 수 있습니다.
참고: 헤더 유형에 주의하십시오.
 
 
 
 
 
 
 
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기