【问题标题】:RESTful API post requestsRESTful API 发布请求
【发布时间】:2020-03-11 22:52:09
【问题描述】:

我正在向 API 发出请求,我正在使用基本授权,但由于某种原因 API 无法解码授权字符串

这是我正在使用的代码:

import base64,requests
from base64 import b64encode

url = 'api.sample/test'

APIuser = b'generic_user'
APIpass = b'generic_pass'

myobj = {"data1_field":"data1"}

data_string = APIuser + b":" + APIpass
data_bytes = b64encode(data_string).decode('ascii')

head = {'Content-Type':'application/json', 'Accept':'*/*','Authorization':'Basic ' + data_bytes}

x = requests.post(url, headers=head,
        data = myobj)

print(x.text)

这是我得到的错误:

{
  "error": {
    "detail": "Cannot decode: java.io.StringReader@45fab9",
    "message": "Exception while reading request"
  },
  "status": "failure"
}

对我做错了什么有任何想法吗?

【问题讨论】:

  • 更新我在这篇文章中找到了修复,stackoverflow.com/questions/57289682/…。我没有收到 java 错误,但现在我收到一个错误,我无法在 API 中进行身份验证,并且密钥正在正确打印
  • 我想我找到了根本原因,但我不知道如何解决它:API 要求将数据发送到 base64 编码,而我发送的数据是一个字符串。想法?

标签: python python-3.x rest python-requests encode


【解决方案1】:

B64在python上被读取为字节数据,所以字符串将表示为b'x',所以这样做的方式是在响应中发送加密类型,我也是使用ascii编码,并且需要一个是 utf8,重要的是不要把它和 utf-8 弄错(编译器显然不一样)

url = "api.sample/test"

payload = "{\"Data1\": \"Data1_field\"}

headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Basic get the string'
}

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

print(response.text.encode('utf8'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2013-06-22
    • 2018-11-19
    相关资源
    最近更新 更多