programing

python 요청 패키지의 데이터와 json 매개 변수의 차이

golfzon 2023. 3. 10. 23:00
반응형

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.dumpsdata필드, 이로 인해 (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

반응형