0

对于任何偶然发现这一点的人:这是关于 Pushbullet API,如标记的那样。

第一次尝试这个。

我似乎对我的上传请求有很好的响应,我很确定我有正确的上传 URL,但是上传阶段一直失败。

代码是 VB6,使用 MSXML2.XMLHTTP 实例发送:

With XMLHTTP
    .open "POST", UploadUrl, True
    .setRequestHeader "Access-Token", AccessToken
    .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & ContentBoundary
    .onreadystatechange = Me
    .send MultipartFormBody
End With

MultipartFormBody是一个字节数组,所以那里没有任何东西被转码为 UTF-8。 ContentBoundary是与正文数据一起生成的字符串。 UploadUrl是一个字符串,其值在前一个(上传请求)响应中返回。XMLHTTP 自动创建 Content-Length 标头。

据我所见,消息正文的格式也正确。当我在后者中有缺陷时,我收到了一条错误消息,该消息对纠正它很有帮助。

--PushbulletReporter_3E43228zZz82234E3{CRLF}
Content-Disposition: form-data; name="file"; filename="capture.png"{CRLF}
Content-Type: image/png{CRLF}
{CRLF}
{bytes of a PNG image}--PushbulletReporter_3E43228zZz82234E3--{CRLF}

但现在我收到 500 Internal Server Error 错误消息“发生未处理的服务器错误”。

正文是3.5KB以下的一根头发。我的想法是......这里可能需要分块编码?

有什么线索吗?还有哪些信息可能会有所帮助?

4

1 回答 1

1

首先,我想为文件上传的事情道歉,遗憾的是,multipart/form-data 很难实际创建,因为很少有语言有标准库可以做到这一点。我有一个版本,您只需直接上传字节,但它还没有准备好发布。

我在日志中看到一些“意外的 EOF”错误,所以我只能假设这就是这里发生的事情。我还没有运行任何测试,但我认为你没有足够的 {CRLF} 或其他一些小错误。如果您可以使用现有库创建编码数据,然后将其与您的输出进行比较,那将是理想的。

在这种情况下,我会尝试让服务器返回 400,但我想这将是“无效的多部分正文”。

我制作了一个测试脚本,看起来缺少 CRLF 是问题所在:

--d3880c80febbef19d78c6daf83da33d6b973d2524d9a6146e4bc71f4973b\r\nContent-Disposition: form-data; name=\"file\"; filename=\"filename\"\r\nContent-Type: application/octet-stream\r\n\r\n{bytes of a PNG image}\r\n--d3880c80febbef19d78c6daf83da33d6b973d2524d9a6146e4bc71f4973b--\r\n

注意PNG图像部分字节之后的CRLF,我认为您缺少那些

于 2015-09-21T23:25:04.853 回答