여러 부분 양식 데이터를 서버로 보내는 RESTful API POST-verb에 대한 테스트를 작성하고 있습니다. 데이터를 json-encode하고 싶습니다. 그렇게하는 올바른 방법은 무엇입니까? 다음은 3 가지 테스트 중 첫 2 단계와 3 단계 (필요한 시나리오)가 실패하는 테스트입니다. 어떤 도움을 주시면 감사하겠습니다.파이썬 요청
import requests
import json
print "test 1, files+data/nojson"
requests.post('http://localhost:8080', files={'spot[photo]': open('test.jpg', 'rb')}, data={'spot': 'spot_description'})
print "test 2, only data/json"
requests.post('http://localhost:8080',data=json.dumps({'spot': 'spot_description'}))
print "test 3, only files+data/json"
requests.post('http://localhost:8080', files={'spot[photo]': open('test.jpg',
'rb')}, data=json.dumps({'spot': 'spot_description'}))
코드의 출력은 : 당신의 data
매개 변수가 문자열이기 때문에
$ /cygdrive/c/Python27/python.exe -B test.py
test 1, files+data/nojson
test 2, only data/json
test 3, only files+data/json
Traceback (most recent call last):
File "test.py", line 12, in <module>
'rb')}, data=json.dumps({'spot': 'spot_description'}))
File "C:\Python27\lib\site-packages\requests\api.py", line 98, in post
return request('post', url, data=data, **kwargs)
File "C:\Python27\lib\site-packages\requests\safe_mode.py", line 39, in wrapped
return function(method, url, **kwargs)
File "C:\Python27\lib\site-packages\requests\api.py", line 51, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 241, in request
r.send(prefetch=prefetch)
File "C:\Python27\lib\site-packages\requests\models.py", line 532, in send
(body, content_type) = self._encode_files(self.files)
File "C:\Python27\lib\site-packages\requests\models.py", line 358, in _encode_files
fields = to_key_val_list(self.data)
File "C:\Python27\lib\site-packages\requests\utils.py", line 157, in to_key_val_list
raise ValueError('cannot encode objects that are not 2-tuples')
ValueError: cannot encode objects that are not 2-tuples
테스트 할 시간이 없다는 사실은 open ('test.jpg', 'rb')'을 전달할 때 단순히 파일 IO 컨테이너를 전달한다는 것입니다. 실제 bytestream 인'open ('test.jpg', 'rb'). read()'를 전달해야합니다. – jdotjdot
내일 확인하겠습니다. 파일을 전달하고 데이터의 일반 사전이 실제로 작동하기 때문에 이것은 올바르지 않습니다. –