上传:500内部服务器错误

时间:2015-09-21 22:28:49

标签: pushbullet

对于任何磕磕绊绊的人:这是关于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以下的头发。我喜欢这样的概念......这里可能需要分块编码吗?

任何线索?还有哪些信息可能会有所帮助?

1 个答案:

答案 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,我认为你缺少那些