pythonpost请求json_将JSON字符串作为post请求发送

在Python2中,一个有效的POST请求能成功发送JSON数据给API,但在Python3中遇到了问题。尝试使用`urllib.request`模块时,会收到数据无效的错误。经过测试,发现直接发送JSON字符串会导致400状态错误。解决方案是使用`requests`库,它能够正确处理JSON数据,如示例代码所示。通过调整代码,问题得以解决。
摘要由CSDN通过智能技术生成

rocksteady的解决方案有效

他最初确实参考过字典。但是以下发送JSON字符串的代码在使用请求时也产生了奇迹:import requests

headers = {

'Authorization': app_token

}

url = api_url + "/b2api/v1/b2_get_upload_url"

content = json.dumps({'bucketId': bucket_id})

r = requests.post(url, data = content, headers = headers)

我正在使用一个API,它要求我将JSON作为POST请求发送以获取结果。问题是Python 3不允许我这样做。

下面的Python2代码工作得很好,实际上它是正式的示例:request = urllib2.Request(

api_url +'/b2api/v1/b2_get_upload_url',

json.dumps({ 'bucketId' : bucket_id }),

headers = { 'Authorization': account_authorization_token }

)

response = urllib2.urlopen(request)

但是,在Python3中使用此代码只会使它抱怨数据无效:import json

from urllib.request import Request, urlopen

from urllib.parse import urlencode

# -! Irrelevant code has been cut out !-

headers = {

'Authorization': app_token

}

url = api_url + "/b2api/v1/b2_get_upload_url"

# Tested both with encode and without

content = json.dumps({'bucketId': bucket_id}).encode('utf-8')

request = Request(

url=url,

data=content,

headers=headers

)

response = urlopen(req)

我试过做urlencode(),就像你应该做的那样。但这将从web服务器返回400状态代码,因为它需要纯JSON。即使纯JSON数据无效,我也需要以某种方式强制Python发送它。

编辑:根据要求,这里是我得到的错误。由于这是一个flask应用程序,下面是调试器的屏幕截图:

添加.encode('utf-8')会产生“预期的字符串或缓冲区”错误

编辑2:添加了.encode('utf-8')的调试器的Screenshot

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值