파이썬 requests 파일 POST 오류 (인코딩??)
조회수 2249회
텔레그램 봇으로 파일을 보내기 위해 https://api.telegram.org/bot~~~/sendaudio 에 POST 요청을 보내려고 합니다.
URL = 'https://api.telegram.org/bot<...>/sendaudio'
VALUE = {'chat_id': '<...>'}
FILE = {'audio': open('a.mp3', 'rb')}
r = requests.post(URL, data=VALUE, files=FILE)
이런 식으로 실행하면 정상적으로 파일이 전송되고 서버측에서 응답이 돌아옵니다.
그런데 파일명을
FILE = {'audio': open('あ.mp3', 'rb')} 라던가 FILE = {'audio': open('가.mp3', 'rb')}
이런식으로 하고 동일하게 실행시키면 서버측에서 audio 를 전달받지 못했다는 응답이 돌아옵니다. Postman을 통해 전송하면 정상적으로 동작하는 것으로 보아 requests 사용 과정에서 발생하는 오류인 것 같은데 혹시 어떻게 하면 해결할 수 있을까요? ㅠㅠ 아니면 다른 방법으로 동일한 기능을 구현할 수 있는 방법이 있는지 궁금합니다...
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
-
파이썬 3.5.3 버전을 사용중입니다...
>>> FILE = {u'audio': codecs.open(u'안녕.mp3', 'rb')} >>> r = requests.post(URL, data=VALUE, files=FILE) >>> r <Response [413]> >>> r = requests.post(URL, data=VALUE, files=FILE) >>> r <Response [400]> >>> r = requests.post(URL, data=VALUE, files=FILE) >>> r <Response [400]> >>> r <Response [400]> >>> FILE = {u'audio': codecs.open(u'안녕.mp3', 'rb')} >>> r = requests.post(URL, data=VALUE, files=FILE) >>> r <Response [413]> >>> r = requests.post(URL, data=VALUE, files=FILE) >>> r <Response [400]> >>> r = requests.post(URL, data=VALUE, files=FILE) >>> r <Response [400]>
다시 확인하면서 여러번 시도 해보니 이런 식으로 파일 객체 생성 후 처음 보내는 요청에는 413 응답이 돌아오지만 나머지는 400으로 돌아오네요 ㅠㅠ 텔레그램 서버 측에서 문제가 있는 같기도 하고... 잘 모르겠네요... ㅠㅠㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
- 윈도우인가요? 윈도우라면 py 파일로 작성하시고 파일 상단에 #-*- coding:utf-8 -*- 를 추가하여 실행해보세요. 정영훈 2018.12.18 12:13
- 400 에러는 질문자님이 요청을 잘못 보내고 있다는 bad request 에러입니다. 텔레그램 문제가 아닐겁니다. 엽토군 2018.12.18 12:14
- 400 에러 bad request 라는 것이죠. 문제는 http 오류는 서버에서 custom 하게 throw 할 수도 있다는 것이죠 텔레그렘쪽에서 허용하지 않는 문자인 경우 400 에러 던지도록 구성하면 그만이니까요. 또한 질문에도 영문인 경우는 문제가 없다는 경우라서 말이죠. 정영훈 2018.12.20 03:05
- open(unicode(파일명, 'euc-kr')) 하는식으로 파일명을 문자셋 변환해 보세요. 엽토군 2018.12.20 10:02
-
댓글 입력