개발자

파이썬 requests.get에서 params에 dictionary 적용하는 방법!!

2023년 06월 09일조회 224

파이썬에서 requests.get 메소드로 API 요청 보낼 때 params에 dictionary 는 어떻게 적용할 수 있나요 ㅠㅠ 제 생각에는 params에 unicode를 넣는 방식이 문제인 것 같긴 한데....

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

달레님의 프로필 사진

requests 라이브러리는 params로 넘어온 사전을 알아서 URL 쿼리 문자열로 변환해줍니다. 따라서 올려주신 코드 기준으로는 다음과 같은 URL로 HTTP 요청이 전송될 것입니다. https://www.bitmex.com/api/v1/instrument?filter=%7B%27typ%27%3A+%27FFWCSX%27%7D&count=5&start=3&reverse=false 그런데 제가 직접 한 번 해당 API를 호출해보니 다음과 같은 에러가 수신되네요. ``` {'error': {'message': "Invalid value for argument 'filter' of type 'object'. Received type was string. Error: Unexpected token y in JSON at position 1", 'name': 'HTTPError'}} ``` 에러 내용에 따라서 filter 파라미터에 넘기는 값을 사전에서 JSON 문자열로 변환하였다니 정상적으로 데이터가 수신되네요. 수정한 코드를 첨부하였습니다. json 모듈의 dumps() 함수를 사용하는 방법에 대해서는 제가 예전에 정리해놓은 글을 공유해드릴테니 참고해보시면 좋을 것 같습니다: https://www.daleseo.com/python-json/

1
2
3
4
5
6
7
8
import json
import requests

# 사전을 JSON 문자열로 변환
params = {'filter': json.dumps({'typ': 'FFWCSX'}) , 'count': 5, 'start': 3, 'reverse': 'false'}
output = requests.get("https://www.bitmex.com/api/v1/instrument", params=params).json()
print(output)
# [{'symbol': 'FCTXBT', 'rootSymbol': 'FCT', ...
장형주님의 프로필 사진

우선 남겨주신 코드의 문자열들이 따옴표 두개로 감싸져 있는데, 이건 오타라고 가정하겠습니다. 요청 파라미터의 경우 url에 같이 넣어서 전달되기 때문에 딕셔너리의 값(value)는 문자열이여야합니다(정수 같은 것들은 자동으로 문자열로 변환). 그러나 남겨주신 코드의 딕셔너리는 딕셔너리를 값으로 포함하고 있으므로, 이 과정에서 오류가 발생하고 있습니다. 따라서 위에 답변 남겨주신 것과 같이 딕셔너리를 json.dumps를 사용하여 문자열로 변환 후 수신하는 쪽에서 딕셔너리로 변환을 하거나, json 인자를 사용해서 데이터를 주고 받도록 수정하면 되실 겁니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!