2017-11-13 1 views
1

내가 요청을 게시하기 위해 노력하고있어 호출 할 때 '읽기'가없는 그 curl은 다음과 같습니다과 :AttributeError : '부울'개체가 어떤 속성 requests.post

curl -X POST \ 
    --header "Authorization: Bearer 48378438…" \ 
    --header "X-Backtory-Storage-Id: 125653265" \ 
    --form fileItems[0][email protected]"/path/to/file1.txt" \ 
    --form fileItems[0].path="/path1/path2/" \ 
    --form fileItems[0].replacing=true \ 
    http://storage.backtory.com/files 

을 그리고 내 코드는 다음과 같은 것입니다 : 내 대구의

Traceback (most recent call last): 
    File "backtory-test.py", line 27, in <module> 
    upload_r = requests.post("http://storage.backtory.com/files", files=upload_data, headers=upload_headers) 
    File "C:\Program Files\Python36\lib\site-packages\requests\api.py", line 112, in post 
    return request('post', url, data=data, json=json, **kwargs) 
    File "C:\Program Files\Python36\lib\site-packages\requests\api.py", line 58, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "C:\Program Files\Python36\lib\site-packages\requests\sessions.py", line 494, in request 
    prep = self.prepare_request(req) 
    File "C:\Program Files\Python36\lib\site-packages\requests\sessions.py", line 437, in prepare_request 
    hooks=merge_hooks(request.hooks, self.hooks), 
    File "C:\Program Files\Python36\lib\site-packages\requests\models.py", line 308, in prepare 
    self.prepare_body(data, files, json) 
    File "C:\Program Files\Python36\lib\site-packages\requests\models.py", line 496, in prepare_body 
    (body, content_type) = self._encode_files(files, data) 
    File "C:\Program Files\Python36\lib\site-packages\requests\models.py", line 159, in _encode_files 
    fdata = fp.read() 
AttributeError: 'bool' object has no attribute 'read' 

섹션 :

upload_headers = {'Authorization':'Bearer' + ' ' + access_token, 'X-Backtory-Storage-Id':'48378438**********'} 
upload_data = {'fileItems[0].fileToUpload': open('file.txt', 'rb'), 'fileItems[0].path': r'/path1/', 'fileItems[0].replacing': True} 
upload_response = requests.post("http://storage.backtory.com/files", files=upload_data, headers=upload_headers) 
print(upload_r) 

그러나이 코드를 실행 한 후

나는이 오류 전자는 버그 야?

답변

0

files 사전의 모든 값은 파일 설명자 형식의 개체 (즉, read 메서드 있음)이거나 튜플이어야합니다 (아래 참조).

True (오류가 말한 것과 같은) 방법도 튜플이 아닙니다.

그래서
upload_data = {'fileItems[0].fileToUpload': open('file.txt', 'rb'), 
       'fileItems[0].path': r'/path1/', 
       'fileItems[0].replacing': True} 

단순히

upload_data = {'filename': open('file.txt', 'rb')} 

또 다른 옵션은 값으로 튜플을 제공하는 것입니다해야한다. 이렇게하면 몇 가지 옵션을 설정할 수 있습니다. requests docs에 대한 자세한 내용을 볼 수 있습니다.

pathreplacing은 데이터로 게시해야하며 files 사전의 일부가 아닌 변수와 비슷합니다.

+0

감사합니다. DeepSpace! 문제가 해결되었습니다 :) –

관련 문제