【问题标题】:Documentation for Rebol2's read/custom?Rebol2 的读取/自定义文档?
【发布时间】:2016-12-08 19:34:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: http twitter rebol2


    【解决方案1】:

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

    probe system/schemes/HTTP
    

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

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

    保存:

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

    重新加载:

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

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

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

    希望这会有所帮助。

    【讨论】:

    • 修改HTTP对象正是我所需要的,谢谢。我将不得不查看是否有一些转换导致二进制数据被错误地转换(除非首先使用 to-string 转换它,否则它占用实际字节的两倍)。
    • 这看起来像是一个显式的,或者更可能是隐式的,form 调用,将数据转换为字符串。如果找不到,请告诉我,我会快速查看。
    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多