对于任何磕磕绊绊的人:这是关于Pushbullet API的标记。
第一次尝试这个。
我似乎对我的上传请求有一个很好的回复,我很确定我有正确的上传网址,但上传阶段一直在我失败。
代码是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
是与正文数据串联生成的String。 UploadUrl
是一个String,其前一个(上传请求)响应中返回一个值。 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内部服务器错误并显示错误消息“发生了未处理的服务器错误。”
身体是3.5KB以下的头发。我喜欢这样的概念......这里可能需要分块编码吗?
任何线索?还有哪些信息可能会有所帮助?
答案 0 :(得分:1)
首先,我想为该文件上传事件道歉,多部分/表单数据遗憾地难以实际创建,因为很少有语言有标准库来执行此操作。我有一个版本,您只需直接上传字节,但它尚未准备好发布。
我在日志中看到一些“意外的EOF”错误,所以我只能假设这就是这里发生的事情。我还没有运行任何测试,但我认为你没有足够的{CRLF}或其他一些小错误。如果您可以使用现有库创建编码数据,那么将其与输出进行比较,这将是理想的。
在这种情况下,我会尝试让服务器返回400,但我想它会是“无效的多部分体”。
我制作了一个测试脚本,看起来缺少的CRLF就是问题所在:
System.out.println(sortTime.start()); // Start Timer
java.util.Arrays.sort(numbers); // Sort the array
System.out.println(sortTime.stop());// stop timer
System.out.println("the elapsed time is: " + sortTime.getElapsedTime());
}
} //end of main class (used for testing)
//Define Class
class StopWatch {
long startTime;
long endTime;
//Constructors
public StopWatch () {
}
//Methods
long start() {
long startTime = System.currentTimeMillis();
return startTime;
}
long stop() {
long endTime = System.currentTimeMillis();
return endTime;
}
long getElapsedTime() {
return (endTime - startTime);
}
}
请注意PNG图像部分字节后的CRLF,我认为你缺少那些