2016-06-23 41 views
6

Tôi có ứng dụng Rails 4 sử dụng xác thực dựa trên mã thông báo cho API và cần có thể cập nhật bản ghi thông qua tập lệnh Python 3.Cách sử dụng yêu cầu gửi yêu cầu PATCH với tiêu đề

kịch bản hiện tại của tôi trông như thế này

import requests 
import json 

url = 'http://0.0.0.0:3000/api/v1/update_experiment.json' 
payload = {'expt_name' : 'A60E001', 'status' : 'done' } 

r = requests.patch(url, payload) 

mà hoạt động OK nếu tôi tắt xác thực API.

Tôi không thể tìm ra cách thêm tiêu đề vào tiêu đề, requests.patch chỉ nhận hai tham số theo tài liệu.

tôi sẽ cần phải nhận được đến điểm mà các thông tin tiêu đề sau đây sẽ bổ sung

'Authorization:Token token="xxxxxxxxxxxxxxxxxxxxxx"' 

Đây là loại tiêu đề hoạt động OK trong curl. Làm thế nào tôi có thể làm điều này trong Python 3 và yêu cầu?

+0

Bạn có thực sự * thử * thêm 'header = '? Chuyện gì đã xảy ra? – jonrsharpe

+0

Tôi mệt mỏi như 'header = {'Authorization': 'Token', 'token': 'xxxxxx'}' rồi 'r = requests.patch (url, payload, headers = headers)' nhưng không có gì xảy ra, không lỗi trong Python, không có phản ứng nào từ WebRick trên Rails. Đang cố gắng chơi với các bản ghi để xem những gì nó đang diễn ra. –

Trả lời

5

patch mất kwargs, chỉ cần vượt qua tiêu đề = {} your_header:

def patch(url, data=None, **kwargs): 
    """Sends a PATCH request. 

    :param url: URL for the new :class:`Request` object. 
    :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. 
    :param \*\*kwargs: Optional arguments that ``request`` takes. 
    :return: :class:`Response <Response>` object 
    :rtype: requests.Response 
    """ 

    return request('patch', url, data=data, **kwargs) 

Sosomething như:

head = {"Authorization":"Token token=xxxxxxxxxxxxxxxxxxxxxx"} 
url = 'http://0.0.0.0:3000/api/v1/update_experiment.json' 
payload = {'expt_name' : 'A60E001', 'status' : 'done' } 

r = requests.patch(url, payload, headers=head) 
+0

Xin chào. Tôi đã thử 'headers = {'Authorization': 'Token', 'token': 'xxxxxx'}' rồi 'r = requests.patch (url, payload, headers = headers)' nhưng Rails không có vẻ như thế này. Xác thực không thành công. Làm thế nào tôi có thể xem những gì Python thực sự gửi, làm thế nào để kiểm tra các tiêu đề. Tôi gắn 'print (r.headers) 'nhưng điều này không bao gồm bất kỳ thông tin nào mà tôi đã truyền vào làm tiêu đề. –

+0

@BartC lưu ý rằng đó không phải là định dạng khá của các tiêu đề - đọc lại đoạn mã cuối cùng. – jonrsharpe

+1

@PadraicCunningham Rất nhiều Thanks !!!!, mà đã làm việc rất lớn, bỏ lỡ chi tiết/chỉ không nhận được nó là thủ phạm tất cả cùng trong nhiều nỗ lực khác của tôi để làm cho nó hoạt động. Cảm ơn một lần nữa. –

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