PUT Python не обновляет данные - PullRequest
0 голосов
/ 05 сентября 2018

Редактировать обновление:

Я попробовал решение, приведенное на этой странице, но оно также не работает для меня: Поместить запрос, работающий в curl, но не в Python

Я использую Python 2.7. Я пытаюсь использовать запрос PUT. Данные должны быть отправлены в виде данных.

import requests
import json
url = "http://httpbin.org/put"
data = {'lastName':'testNew'}
headers = {

    'Authorization': "JWTeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTc0LCJlbWFpbCI6ImNlbGVzdGlhbHRlc3QxQGdtYWlsLmNvbSIsInJhbmRvbV9qd3QiOiJlNXg1Q0oifQ.xc5jVAS6ZtTPrjg0LizznT0-sE9W_FkSW5s",
    }

response = requests.request("PUT", url,data=data, headers=headers)

print(response.text)

Этот запрос дает мне следующий ответ:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "lastName": "testNew"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTc0LCJlbWFpbCI6ImNlbGVzdGlhbHRlc3QxQGdtYWlsLmNvbSIsInJhbmRvbV9qd3QiOiJlNXg1Q0oifQ.xc5jVAS6ZtTPrjg0LizznT0-sE9W_", 
    "Connection": "close", 
    "Content-Length": "16", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.4"
  }, 
  "json": null, 
  "origin": "111.93.35.2", 
  "url": "http://httpbin.org/put"
}

Но когда я помещаю api url, где я хочу использовать этот запрос, api зависает и выдает ошибку плохого соединения.

API, в котором я пытаюсь обновить значения, прекрасно работает с Postman, и код, который они дают в буфере обмена, выглядит следующим образом, и он работает, как брелок, обновляет данные:

import requests

url = "http://myUrl/dashboard/editProfile"

payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"lastName\"\r\n\r\nChangeLastFromCode\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    'Authorization': "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTc0LCJlbWFpbCI6ImNlbGVzdGlhbHRlc3QxQGdtYWlsLmNvbSIsInJhbmRvbV9qd3QiOiJlNXg1Q0oifQ.xc5jVAS6ZtTPrjg0LizznT0-sE9W_",

    }

response = requests.request("PUT", url, data=payload, headers=headers)

print(response.text)

Как мне написать запрос, не используя граничное значение, как указано в примере Почтальона выше? Это всего лишь простой запрос PUT в данных формы. Значения могут быть один или несколько. В приведенном выше примере я использую только «lastName», которое я хочу изменить через PUT>

1 Ответ

0 голосов
/ 08 сентября 2018

Лучший способ справиться с граничным условием - мультипартнер. https://toolbelt.readthedocs.io/en/latest/uploading-data.html

Вы можете попробовать что-то вроде следующего кода.

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
    )

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
...