跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python requests 库发送 body 只有一个 list 的请求的写法
未分類
18 11 月 2020

Python requests 库发送 body 只有一个 list 的请求的写法

Python requests 库发送 body 只有一个 list 的请求的写法

資深大佬 : kickcandy 3

[300004167],发送的 body 是这样的格式,对,没有 key,只有 value,查过确实也是正确的 json 格式,用 postman 发送可以正常返回,但是用 python 的 requests 库,试了好几种写法都是报错:

各位朋友有没有好的办法解决,谢谢!

—-self.DeviceManage.send_post(url, json.dumps([300004167]), header)

报错:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

—-self.DeviceManage.send_post(url, [str(300004167)], header)

报错:ValueError: too many values to unpack (expected 2)

—-self.DeviceManage.send_post(url, numpy.array([300004167]), header) #试图转数组

报错:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

大佬有話說 (13)

  • 資深大佬 : Pagliacii

    用 `json.dumps` 一下,如这样:![image.png]( https://i.loli.net/2020/12/01/WPFOI7G9UV3x1Ku.png)

  • 資深大佬 : Pagliacii

    @Pagliacii #1 至于你用了 `json.dumps` 报错,就要看看 `send_post` 是怎么写的了

  • 資深大佬 : leavic

    wireshark 抓包看看发出去的有什么区别不就知道了。

  • 主 資深大佬 : kickcandy

    @Pagliacii
    send_post 方法就是调了 requests.post 方法,做了一些处理封装:

    def send_post(self, url, data, header):
    result = requests.post(url=url, data=data, headers=header)
    # res = result1.json()
    result_str = json.dumps(result.json(), ensure_ascii=False, sort_keys=True, indent=2) # 结果转字符串
    result_dict = json.loads(result_str) # 结果转字典
    return result, result_dict

  • 資深大佬 : zhijiansha

    把 data 改成 json=[123]试试?

  • 資深大佬 : binux

    第一个报错是 result_dict = json.loads(result_str) 和你 post 无关

  • 資深大佬 : Pagliacii

    @kickcandy #4 那你就加上一些日志或者 `print` 语句,确定一下具体是哪里出错了。比如:

    “`
    result = requests.post(url=url, data=data, headers=header)
    print(f”{result.content}”)
    result_str = json.dumps(result.json(), ensure_ascii=False, sort_keys=True, indent=2)
    print(f”{result_str=}”)
    result_dict = json.loads(result_str)
    print(f”{result_dict=}”)
    “`

  • 資深大佬 : cryingsky

    请求返回结果解析有问题
    返回数据应该不是 json

  • 資深大佬 : iyaozhen

    这就是 send_post 瞎封装

    不改 send_post 源码的话,self.DeviceManage.send_post(url, json.dumps([300004167]), header)
    header 里面加上 content type json

  • 主 資深大佬 : kickcandy

    @iyaozhen 是,发现了是封装的问题,返回的不是 json 格式的

  • 主 資深大佬 : kickcandy

    @cryingsky 返回结果不是 json,意味着这个接口不规范?

  • 資深大佬 : cryingsky

    @kickcandy #11 那就看你接口规规范怎么定的

  • 資深大佬 : bnm965321

    单 list 的 JSON 有安全问题,之前在 tornado 的文档看到过

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具