Rebol2 read/custom 的文档?
Documentation for Rebol2's read/custom?
我一直在尝试更新 Ross-Gill 的 Twitter API for REBOL2 以支持上传媒体。通过查看其来源、REBOL 食谱、代码意识网站和此处的其他问题,我的理解是 read/custom
是 POST
网站数据的首选方式。
但是,我没能找到关于 read/custom
的任何真实文档。例如:是否支持发送multipart/form-data
? (我已经设法通过手动组合每个部分来解决这个问题,但它似乎不适用于 Twitter 端的所有图像文件并且有点 hack)。 read/custom
在 HTTP/1.0 200 OK
回复中是否只有 return 文本? (看起来是这样,当我收到 HTTP/1.0 202 Accepted
并需要读取结果数据时,这是有问题的)。如果不使用 to-string
转换数据,read/custom/binary
似乎无法正确发送二进制数据,这是有原因的吗?
TL;DR:某处是否有关于 REBOL2 read/custom
的良好文档?或者,read/custom
是否仅适用于基本 POST
,我应该使用端口并手动处理 HTTP 响应?
您猜对了,read/custom
用于简单的 HTTP 帖子,仅处理 Web 表单数据(这就是它在二进制数据上失败的原因)。没有官方文档。但这不是问题,因为您可以访问 HTTP 实现的源代码:
probe system/schemes/HTTP
在那里你可以看到 /custom
细化支持两个关键字,post
和 header
(用于设置自定义 HTTP headers)。看起来即使您同时使用这两个关键字,Content-Type
也将被强制 application/x-www-form-urlencoded
无论如何(这可能是您的二进制数据被服务器拒绝的原因,因为提供的 mime 类型是错了)。
为了解决这个问题,您可以保存 HTTP object,修改其实现以满足您的需要并重新加载它。
节省:
save %http-scheme.r system/schemes/HTTP
正在重新加载:
system/schemes/HTTP: do load %http-scheme.r
如果您只是在 HTTP 代码中禁用 hard-coded Content-Type
设置,然后使用 header
关键字提供您自己的设置,它应该可以正常工作,即使是二进制数据:
read/custom <url> [header [Content-Type: <...>] post <data>]
希望对您有所帮助。
我一直在尝试更新 Ross-Gill 的 Twitter API for REBOL2 以支持上传媒体。通过查看其来源、REBOL 食谱、代码意识网站和此处的其他问题,我的理解是 read/custom
是 POST
网站数据的首选方式。
但是,我没能找到关于 read/custom
的任何真实文档。例如:是否支持发送multipart/form-data
? (我已经设法通过手动组合每个部分来解决这个问题,但它似乎不适用于 Twitter 端的所有图像文件并且有点 hack)。 read/custom
在 HTTP/1.0 200 OK
回复中是否只有 return 文本? (看起来是这样,当我收到 HTTP/1.0 202 Accepted
并需要读取结果数据时,这是有问题的)。如果不使用 to-string
转换数据,read/custom/binary
似乎无法正确发送二进制数据,这是有原因的吗?
TL;DR:某处是否有关于 REBOL2 read/custom
的良好文档?或者,read/custom
是否仅适用于基本 POST
,我应该使用端口并手动处理 HTTP 响应?
您猜对了,read/custom
用于简单的 HTTP 帖子,仅处理 Web 表单数据(这就是它在二进制数据上失败的原因)。没有官方文档。但这不是问题,因为您可以访问 HTTP 实现的源代码:
probe system/schemes/HTTP
在那里你可以看到 /custom
细化支持两个关键字,post
和 header
(用于设置自定义 HTTP headers)。看起来即使您同时使用这两个关键字,Content-Type
也将被强制 application/x-www-form-urlencoded
无论如何(这可能是您的二进制数据被服务器拒绝的原因,因为提供的 mime 类型是错了)。
为了解决这个问题,您可以保存 HTTP object,修改其实现以满足您的需要并重新加载它。
节省:
save %http-scheme.r system/schemes/HTTP
正在重新加载:
system/schemes/HTTP: do load %http-scheme.r
如果您只是在 HTTP 代码中禁用 hard-coded Content-Type
设置,然后使用 header
关键字提供您自己的设置,它应该可以正常工作,即使是二进制数据:
read/custom <url> [header [Content-Type: <...>] post <data>]
希望对您有所帮助。