python 요청 패키지의 데이터와 json 매개 변수의 차이
python Requests 패키지의 데이터와 json 파라미터의 차이점은 무엇입니까?
문서상으로는 불명확합니다.
이 코드는 다음과 같습니까?
import requests
import json
d = {'a': 1}
response = requests.post(url, data=json.dumps(d))
이 경우,dictJSON에게 ☝로 전송!
다음 작업과는 다른 작업 수행:
import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)
만약 그렇다면?후자가 자동으로 설정됩니까?content-type의 선두에application/json?
제 질문에 대답하자면, 위의 두 가지 예시는 동일한 작업을 수행하고 있습니다.json매개 변수는 실제로content-type머리글에application/json위의 첫 번째 예에서는data파라미터,content-type수동으로 설정할 필요가 있습니다.
2021년 12월 현재requests 이제 vs 사용에 대한 설명서에서 그 차이를 명확하게 알 수 있습니다.
(저희 회사의 적은 기여로 - 제 홍보와 여러분의 업보트가 이것이 문제가 되었음을 확인시켜 주었습니다.감사합니다!)
PS OP 질문에 대한 답변은 없지만 첫 번째 코드가 조금 다른 경우:
import requests
import json
d = {'a': 1}
response = requests.post(url, data=d)
(주의:dict d여기서 JSON 문자열로 변환되지 않습니다.)
또한 두 번째 코드가 동일한 경우(완전성을 위해 복사):
import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)
...그렇다면 결과는 많이 달라질 것이다.
첫 번째 코드는 다음과 같은 콘텐츠유형을 가진 요청을 생성합니다.application/x-www-form-urlencoded이 형식의 데이터를 사용하여 다음을 수행합니다."a=1"
두 번째 코드는 다음과 같은 콘텐츠유형을 가진 요청을 생성합니다.application/json그리고 실제로 이 형식의 데이터입니다.{"a": 1}- JSON 문자열.
여기서의 경험만으로 이야기하지만, 이 기능을 사용하는 것이 바람직하다는 것을 주의해 주십시오.jsondict를 dict에 덤프하는 대신 dict를 사용하여 입력한다.data들판.
다시 한 번 말씀드리지만, 경험으로만 말씀드리면, 코드 자체를 공부한 것은 아니지만, 요청 라이브러리가 단순히 json serialization을 하는 것보다 더 영리한 것 같습니다.json.dumps·사용시json.dumps에data필드, 이로 인해 (FastAPI) 서버에서 "value is not valid dict" 오류 응답이 발생한 경우가 몇 번 있습니다.사용방법json필드 대신 이러한 문제를 해결했습니다.
편집: 오늘 코드를 확인했습니다.를 사용하는 경우json파라미터, requests library는 실제로는 설정만 하는 것 같습니다.Content-Type덤프:
from .compat import json as complexjson
content_type = 'application/json'
body = complexjson.dumps(json)
if not isinstance(body, bytes):
body = body.encode('utf-8')
어디쯤에서requests.compat,그json단지 다음과 같습니다.
try:
import simplejson as json
except ImportError:
import json
...그래서 왜 이 작업을 수동으로 하는지 알 수 없습니다.data¯\_(ツ)_/¯¯\_(ツ)_/¯
언급URL : https://stackoverflow.com/questions/26685248/difference-between-data-and-json-parameters-in-python-requests-package
'programing' 카테고리의 다른 글
| 그라들 - 주 클래스를 찾거나 로드할 수 없습니다. (0) | 2023.03.10 |
|---|---|
| 왜 java.lang이 뜨죠?DB에 BLOB를 로드하려고 할 때 AbstractMethodError가 발생합니까? (0) | 2023.03.10 |
| 콘솔에서 종료되지 않은 JSX 콘텐츠 오류를 발생시킵니다. (0) | 2023.03.10 |
| 스프링 부트로 CSS가 로드되지 않음 (0) | 2023.03.10 |
| componentDidUpdate와 componentDidMount (0) | 2023.03.10 |