2013-04-22 38 views
13

Tôi đã sử dụng curl để gửi yêu cầu POST với dữ liệu từ tệp.Yêu cầu Python - Dữ liệu POST từ một tệp

Tôi đang cố gắng đạt được cùng một mô-đun yêu cầu python. Đây là kịch bản python của tôi

import requests 
payload=open('data','rb').read() 
r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'), data=payload , verify=False) 
print r.text 

tập tin dữ liệu trông giống như dưới đây

'ID' : 'ISM03' 

Nhưng kịch bản của tôi không đăng các dữ liệu từ tập tin. Am i thiếu cái gì ở đây.

Trong Curl, tôi đã từng có một lệnh như dưới đây

Curl --data @filename -ik -X POST 'https://IP_ADDRESS/rest/rest/2' 

Trả lời

30

Bạn không cần phải sử dụng .read() đây, chỉ cần dòng đối tượng trực tiếp. Bạn cần đặt tiêu đề Content-Type một cách rõ ràng; curl thực hiện điều này khi sử dụng --data nhưng requests không:

with open('data','rb') as payload: 
    headers = {'content-type': 'application/x-www-form-urlencoded'} 
    r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'), 
         data=payload, verify=False, headers=headers) 

Tôi đã sử dụng các đối tượng tập tin mở như một người quản lý bối cảnh như vậy mà nó cũng là tính năng tự động đóng lại cho bạn khi thoát khối (ví dụ như một ngoại lệ xảy ra hoặc requests.post() trả về thành công).

+5

Làm thế nào mà bạn luôn có vẻ trả lời ngay cả những câu hỏi trăn khó nhất? –

+1

Đừng tin mọi thứ tôi đăng .. Đã xảy ra lỗi trong bản sửa đổi đầu tiên ở đó. –

+0

Quá muộn, quá muộn! XD –

Các vấn đề liên quan