1

我一直在尝试更新 Ross-Gill 的REBOL2 的 Twitter API以支持上传媒体。通过查看它的来源、REBOL 食谱、代码意识网站以及这里的其他问题,我的理解是这是将数据传输到网站read/custom的首选方式。POST

但是,我无法在read/custom. 例如:是否支持发送multipart/form-data?(我已经设法通过手动组合每个部分来解决这个问题,但它似乎不适用于 Twitter 端的所有图像文件,而且有点破解)。是否仅在响应中read/custom返回文本?HTTP/1.0 200 OK(看起来是这样,当我收到HTTP/1.0 202 Accepted并需要读取结果数据时这是有问题的)。是否有原因在read/custom/binary不使用转换数据的情况下似乎无法正确发送二进制数据to-string

TL;DR:是否有关于 REBOL2 的好文档read/custom?或者,read/custom仅适用于 basicPOST并且我应该使用端口并手动处理 HTTP 响应?

4

1 回答 1

0

你猜对了,read/custom它适用于简单的 HTTP 帖子,仅处理 Web 表单数据(这就是它在二进制数据上会失败的原因)。没有官方文档。但这不是问题,因为您可以访问 HTTP 实现的源代码:

probe system/schemes/HTTP

在那里您可以看到/custom细化支持两个关键字,postheader(用于设置自定义 HTTP 标头)。似乎即使您同时使用这两个关键字,无论如何Content-Type都将被迫这样做(这可能是您的二进制数据被服务器拒绝的原因,因为提供的 mime 类型是错误的)。application/x-www-form-urlencoded

为了解决这个问题,您可以保存 HTTP 对象,修改其实现以满足您的需要并重新加载它。

保存:

save %http-scheme.r system/schemes/HTTP

重新加载:

system/schemes/HTTP: do load %http-scheme.r

如果你只是禁用Content-TypeHTTP 代码中的硬编码设置,然后提供你自己的 usingheader关键字,它应该可以正常工作,即使是二进制数据:

read/custom <url> [header [Content-Type: <...>] post <data>]

希望这可以帮助。

于 2016-12-09T03:53:30.953 回答