关于使用Postman二进制体时图像变成什么的问题
Question about what an Image Is Turned into when You Use Postman Binary Body
当您在邮递员中发送正文类型为二进制的图像文件时,图像在发送时是如何编码的,或者图像在发送时被转换成什么?它是以字节数组、字节字符串、二进制字符串还是其他方式发送的?
它以原始字节形式发送。只是数据 as-is。没有编码。它与 raw
相同,但您可以指定一个文件而不是文本框(因为文本框已经限制了您可以放入其中)。
在 Postman 中请求:
原文件,对比(来自HxD的截图):
发送的数据(来自 SmartSniff 的屏幕截图):
文本表示(也来自 SmartSniff 的屏幕截图):
您可以看到在 headers 之后附加了原始 GIF 文件 as-is(从十六进制转储中的偏移量 0x116 开始)。
附加信息
处理您的评论:
Is it like a byte string?
所有网络通信都是分组为八位字节(字节)的比特流。我不知道你所说的“字节串”是什么意思,但是这里的数据只是未经修改地传输,每一位都保持不变。 (也就是说,在协议 (HTTP) 级别。当然,在将您的数据拆分为数据包等的网络堆栈之下还有所有剩余的网络堆栈。)
Python 字节文字 b'\x41\x42\x43'
和 Python 字符串 'ABC'
以及字节 41
、42
和 43
(当以十六进制表示法查看时)连续地以某种方式表示相同的事物。最后,您会得到一些零和一,它们是 stored/sent/whatever。 (是的,使用 Non-ASCII 文字会变得复杂,但 b'\xAB'
符号仍然只是一种表示具有给定值的字节的方法。)
would the image being sent be like b'...'?
这是个错误的问题,没有任何有意义的答案。
示例:字母 A
通常由值为 41
(十六进制 - 十进制为 65)或二进制值为 01000001
的字节表示。这 8 位是发送的信息。如果您在 Python 中写入 b'\x41'
,您会得到相同的结果 - 一个字节包含位 01000001
。所以询问 A
是否作为 b'\x41'
发送是没有意义的,除非你指的是实际字符 b' \x41' 就像你将它们输入代码文件一样——在那种情况下不是,因为它们是 7 个字节,如果我们只能发送一个字节(包括代表 A
) 的值。
Say if I was to send the image using an http client what data format would I put the image in to send it to an api that is like sending the image with a binary body in postman?
在 Python 中你有 several ways 来表示原始二进制数据,当发送文件内容时你可以用 b
inary 模式读取文件并传递数据到 HTTP 请求:
requests.post(
url='http://httpbin.org/post',
data=open('./image.gif', 'rb').read(),
headers={'Content-Type': 'application/octet-stream'}
)
在 node.js 中,您可以将此类数据存储在 Buffer
object 中。在 C# 中,您将使用字节数组 (Byte[]
)。大多数语言都有某种方式来表示像这样的字节链,但还没有对它们施加额外的含义。
当您在邮递员中发送正文类型为二进制的图像文件时,图像在发送时是如何编码的,或者图像在发送时被转换成什么?它是以字节数组、字节字符串、二进制字符串还是其他方式发送的?
它以原始字节形式发送。只是数据 as-is。没有编码。它与 raw
相同,但您可以指定一个文件而不是文本框(因为文本框已经限制了您可以放入其中)。
在 Postman 中请求:
原文件
发送的数据(来自 SmartSniff 的屏幕截图):
文本表示(也来自 SmartSniff 的屏幕截图):
您可以看到在 headers 之后附加了原始 GIF 文件 as-is(从十六进制转储中的偏移量 0x116 开始)。
附加信息
处理您的评论:
Is it like a byte string?
所有网络通信都是分组为八位字节(字节)的比特流。我不知道你所说的“字节串”是什么意思,但是这里的数据只是未经修改地传输,每一位都保持不变。 (也就是说,在协议 (HTTP) 级别。当然,在将您的数据拆分为数据包等的网络堆栈之下还有所有剩余的网络堆栈。)
Python 字节文字 b'\x41\x42\x43'
和 Python 字符串 'ABC'
以及字节 41
、42
和 43
(当以十六进制表示法查看时)连续地以某种方式表示相同的事物。最后,您会得到一些零和一,它们是 stored/sent/whatever。 (是的,使用 Non-ASCII 文字会变得复杂,但 b'\xAB'
符号仍然只是一种表示具有给定值的字节的方法。)
would the image being sent be like b'...'?
这是个错误的问题,没有任何有意义的答案。
示例:字母 A
通常由值为 41
(十六进制 - 十进制为 65)或二进制值为 01000001
的字节表示。这 8 位是发送的信息。如果您在 Python 中写入 b'\x41'
,您会得到相同的结果 - 一个字节包含位 01000001
。所以询问 A
是否作为 b'\x41'
发送是没有意义的,除非你指的是实际字符 b' \x41' 就像你将它们输入代码文件一样——在那种情况下不是,因为它们是 7 个字节,如果我们只能发送一个字节(包括代表 A
) 的值。
Say if I was to send the image using an http client what data format would I put the image in to send it to an api that is like sending the image with a binary body in postman?
在 Python 中你有 several ways 来表示原始二进制数据,当发送文件内容时你可以用 b
inary 模式读取文件并传递数据到 HTTP 请求:
requests.post(
url='http://httpbin.org/post',
data=open('./image.gif', 'rb').read(),
headers={'Content-Type': 'application/octet-stream'}
)
在 node.js 中,您可以将此类数据存储在 Buffer
object 中。在 C# 中,您将使用字节数组 (Byte[]
)。大多数语言都有某种方式来表示像这样的字节链,但还没有对它们施加额外的含义。