포스트 요청의 4가지 방법

19118 단어 편물

Post 요청의 네 가지 전송 방법의 Python 구현


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입니다.
형태:
1 requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'application/x-www-form-urlencoded'})
♦Reqeusts는 양식 형태의 게시 요청 전송을 지원하므로 요청 매개변수를 사전에 구성한 다음 요청의 매개변수 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'}가 form의 형태로 서버에 제출되고 form 필드가 반환됨을 알 수 있습니다. 서버에 의해 제출된 데이터입니다.
(2) 요청 본문이 multipart/form-data입니다.
기존의 application/x-www-form-urlencoded 형식 외에도 우리가 자주 사용하는 또 다른 형식은 파일 업로드 형식입니다. 이 형식의 유형은 multipart/form-data입니다.
형태:
1 requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'multipart/form-data'})
♦发送文件中的数据需要(安装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格式文本
1 requests.post(url='',data='',headers={'Content-Type':'text/xml'})
♦传入json格式文本
1 requests.post(url='',data=json.dumps({'key1':'value1','key2':'value2'}),headers={'Content-Type':'application/json'})
또는:
1  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) 요청 본문이 바이너리입니다.
형태:
1 requests.post(url='',files={'file':open('test.xls','rb')},headers={'Content-Type':'binary'})
♦Requests는 멀티파트 형식으로 게시 요청 보내기도 지원합니다. 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!라는 한 줄로 되어 있으며, 요청에 대한 응답 결과에서 서버에 데이터가 업로드되었음을 알 수 있습니다.
참고: 헤더 유형에 주의하십시오.

좋은 웹페이지 즐겨찾기