上传:500 内部服务器错误

Upload: 500 Internal Server Error

对于遇到此问题的任何人:这是关于 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 是与 body 数据一起生成的字符串。 UploadUrl 是一个字符串,其值在前一个(上传请求)响应中返回。 XMLHTTP 自动创建一个 Content-Length header。

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

--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 内部服务器错误和一条错误消息 "An unhandled server error occurred."

body是3.5KB以下的头发。我的想法是...也许这里需要分块编码?

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

首先,我想为文件上传的事情道歉,multipart/form-data 遗憾的是很难实际创建,因为很少有语言具有执行此操作的标准库。我有一个直接上传字节的版本,但还没有准备好发布。

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

在这种情况下,我将尝试使服务器 return 成为 400,但我想它会是 "Invalid multipart body"。

我制作了一个测试脚本,看起来缺少 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,我认为你遗漏了那些