通过python请求通过POST发送图像时,只有第一个字节到达

托马斯·格拉斯坦

我目前正在尝试用一些PIL图像来填充python flask服务器。发送请求的代码如下所示:

...
for i in range(0,1):  
  ...
  chip_gray = Image.fromarray(chip)
  display(chip_gray) #This displays correctly

  byteIO = io.BytesIO()
  chip_gray.save(byteIO, format='PNG')
  byteArr = byteIO.getvalue()
  print(byteArr) #This prints correctly
  length = len(byteArr)

  url = "http://facerec-server.herokuapp.com/add_custom"

  querystring = {"label": lfw_people.target_names[lfw_people.target[i]]}

  headers = {
      'Content-Type': "image/png",
      'Accept': "*/*",
      'Cache-Control': "no-cache",
      'Host': "facerec-server.herokuapp.com",
      'Accept-Encoding': "gzip, deflate",
      'Connection': "keep-alive",
      'Content-Length': str(length),
      'cache-control': "no-cache"
      }

  response = requests.request("POST", url, headers=headers, params=querystring, data={byteArr})

  print(response.text)

我已经按照测试并通过邮递员验证它的工作方式来设置结构。尽管出于某种原因使用了此代码(来自Google Colab的Ran),但只有第一个字节到达了服务器。这是在那里打印的内容:

2019-11-26T22:46:41.238471+00:00 app[web.1]: b'\x89'
2019-11-26T22:46:41.238626+00:00 app[web.1]: Host: facerec-server.herokuapp.com
2019-11-26T22:46:41.238628+00:00 app[web.1]: Connection: close
2019-11-26T22:46:41.238630+00:00 app[web.1]: User-Agent: python-requests/2.21.0
2019-11-26T22:46:41.238631+00:00 app[web.1]: Accept-Encoding: gzip, deflate
2019-11-26T22:46:41.238633+00:00 app[web.1]: Accept: */*
2019-11-26T22:46:41.238634+00:00 app[web.1]: Content-Type: image/png
2019-11-26T22:46:41.238635+00:00 app[web.1]: Cache-Control: no-cache
2019-11-26T22:46:41.238640+00:00 app[web.1]: X-Request-Id: dc61fe1e-5616-4b6d-8870-54b519be9f17
2019-11-26T22:46:41.238641+00:00 app[web.1]: X-Forwarded-For: 35.201.212.71
2019-11-26T22:46:41.238643+00:00 app[web.1]: X-Forwarded-Proto: http
2019-11-26T22:46:41.238644+00:00 app[web.1]: X-Forwarded-Port: 80
2019-11-26T22:46:41.238645+00:00 app[web.1]: Via: 1.1 vegur
2019-11-26T22:46:41.238646+00:00 app[web.1]: Connect-Time: 0
2019-11-26T22:46:41.238648+00:00 app[web.1]: X-Request-Start: 1574808401237
2019-11-26T22:46:41.238649+00:00 app[web.1]: Total-Route-Time: 0
2019-11-26T22:46:41.238650+00:00 app[web.1]: Content-Length: 1
2019-11-26T22:46:41.238746+00:00 app[web.1]: CombinedMultiDict([ImmutableMultiDict([('label', 'George W Bush')]), ImmutableMultiDict([])])
...
2019-11-26T22:46:41.239577+00:00 app[web.1]:   File "server.py", line 49, in method_custom
2019-11-26T22:46:41.239579+00:00 app[web.1]:     img = np.array(Image.open(io.BytesIO(r.data)))
2019-11-26T22:46:41.239580+00:00 app[web.1]:   File "/usr/local/lib/python3.6/site-packages/PIL/Image.py", line 2818, in open
2019-11-26T22:46:41.239581+00:00 app[web.1]:     raise IOError("cannot identify image file %r" % (filename if filename else fp))
2019-11-26T22:46:41.239583+00:00 app[web.1]: OSError: cannot identify image file <_io.BytesIO object at 0x7ff04408e0f8>
2019-11-26T22:46:41.240073+00:00 app[web.1]: 10.12.43.130 - - [26/Nov/2019 22:46:41] "[1m[35mPOST /add_custom?label=George+W+Bush HTTP/1.1[0m" 500 -

请注意,内容长度设置为1,只有第一个字节到达。

这是服务器上读取图像的代码(并与邮递员请求一起使用):

@app.route('/add_custom', methods=['POST'])
    def add_custom():
        print(request.data, flush=True)
        print(request.headers, flush=True)
        print(request.values, flush=True)
        start_time = time.time()
        data = np.array([method_custom(request)], dtype=np.float32)
        index_custom.add(data)
        index_ids_custom.append(request.args.get('label'))
        return Response(response=json.dumps({"time": (time.time() - start_time), "entries": len(index_ids_custom)}), status=200, content_type="application/json")

你们中有人知道这是为什么吗?

昆汀·普拉德(Quentin Pradet)

因此,您的问题Content-Length是1,这是服务器用来读取一个字节的内容。

您可以在客户代码中打印标题以确保Content-Length不是1吗?另一种选择是停止设置Content-Length自己,因为请求可以为您完成设置。

现在让我们来看一下请求调用:

response = requests.request("POST", url, headers=headers, params=querystring, data={byteArr})

你为什么要包裹byteArr我想您实际上只是想data=byteArr在这里。另请注意,requests.request("POST", ...)可以缩短为requests.post(...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Java SSL套接字写入时,第一个字节丢失

来自分类Dev

试图通过两个字典,但只有第一个起作用

来自分类Dev

Socket DataOutputStream 似乎只正确发送第一个字节

来自分类Dev

从QByteArray删除第一个字节

来自分类Dev

第一个字节与第一个字节的元素地址之间的差异

来自分类Dev

播放列表只有名字的第一个字母

来自分类Dev

在python中读取二进制文件时跳过了第一个字节

来自分类Dev

读取文件时第一个字节可能为零吗?

来自分类Dev

使用 lseek 时不打印第一个字节

来自分类Dev

如何使用python查找串行流的第一个字节?

来自分类Dev

红宝石组收集通过foreach中的第一个字母

来自分类Dev

通过第一个字符过滤列值?

来自分类Dev

如何通过标题的第一个字母创建字典但忽略诸如“the”或“a/an”等文章

来自分类Dev

只有令牌的第一个字符存储在c ++中的数组中

来自分类Dev

只有令牌的第一个字符存储在c ++中的数组中

来自分类Dev

通过消除第一个字符来制作与2个表的差值的表

来自分类Dev

如何仅通过.bat文件知道第一个字母时将文件移动到文件夹

来自分类Dev

隐写术后,第一个字节的位异于一位

来自分类Dev

Firefox怪癖:当图像在同一行上时,请选择第一个字母

来自分类Dev

awk NR 变量未按预期工作,在请求第一个字段时获取整行

来自分类Dev

通过使用C#以名称中的第一个字符“#”创建Active Directory组

来自分类Dev

通过mobaxterm使用时,c vim会乱码文件的第一个字符

来自分类Dev

如何通过键入第一个字母来显示可用的函数名称?

来自分类Dev

C++如何通过忽略每行的第一个字符来读取unicode文件

来自分类Dev

将给定值与文件的第一个字节进行比较

来自分类Dev

使用Lua脚本读取lrange结果的第一个字节

来自分类Dev

如何获取磁盘上文件的第一个字节的位置?

来自分类Dev

接收到第一个字节之前的等待时间很长

来自分类Dev

更改s_addr的第一个字节

Related 相关文章

  1. 1

    通过Java SSL套接字写入时,第一个字节丢失

  2. 2

    试图通过两个字典,但只有第一个起作用

  3. 3

    Socket DataOutputStream 似乎只正确发送第一个字节

  4. 4

    从QByteArray删除第一个字节

  5. 5

    第一个字节与第一个字节的元素地址之间的差异

  6. 6

    播放列表只有名字的第一个字母

  7. 7

    在python中读取二进制文件时跳过了第一个字节

  8. 8

    读取文件时第一个字节可能为零吗?

  9. 9

    使用 lseek 时不打印第一个字节

  10. 10

    如何使用python查找串行流的第一个字节?

  11. 11

    红宝石组收集通过foreach中的第一个字母

  12. 12

    通过第一个字符过滤列值?

  13. 13

    如何通过标题的第一个字母创建字典但忽略诸如“the”或“a/an”等文章

  14. 14

    只有令牌的第一个字符存储在c ++中的数组中

  15. 15

    只有令牌的第一个字符存储在c ++中的数组中

  16. 16

    通过消除第一个字符来制作与2个表的差值的表

  17. 17

    如何仅通过.bat文件知道第一个字母时将文件移动到文件夹

  18. 18

    隐写术后,第一个字节的位异于一位

  19. 19

    Firefox怪癖:当图像在同一行上时,请选择第一个字母

  20. 20

    awk NR 变量未按预期工作,在请求第一个字段时获取整行

  21. 21

    通过使用C#以名称中的第一个字符“#”创建Active Directory组

  22. 22

    通过mobaxterm使用时,c vim会乱码文件的第一个字符

  23. 23

    如何通过键入第一个字母来显示可用的函数名称?

  24. 24

    C++如何通过忽略每行的第一个字符来读取unicode文件

  25. 25

    将给定值与文件的第一个字节进行比较

  26. 26

    使用Lua脚本读取lrange结果的第一个字节

  27. 27

    如何获取磁盘上文件的第一个字节的位置?

  28. 28

    接收到第一个字节之前的等待时间很长

  29. 29

    更改s_addr的第一个字节

热门标签

归档