2015-09-21 349 views
0

任何人都在磕磕绊绊:这是关于Pushbullet API的标签。上传:500内部服务器错误

这是第一次尝试。

我似乎对我的上传请求有很好的回应,而且我非常肯定我有正确的上传URL,但上传阶段对我无影响。

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

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内部服务器错误,并显示错误消息“发生了未处理的服务器错误。”

身体是3.5KB以下的头发。我认为这样的想法......或许在这里需要分块编码?

任何线索?更多信息可能会有所帮助?

+0

的服务器的日志可能有帮助。 –

+0

最坏的情况下,你应该得到400,而不是500,我会看看如果我能找到问题所在。 –

回答

1

首先,我想为该文件上传的事情道歉,multipart/form-data很难实际创建,因为很少有语言具有这样的标准库。我有一个版本,您只需直接上传字节,但尚未准备好发布。

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

在这种情况下,我会尝试让服务器返回一个400,但我想它会是“无效的多部分主体”。

我做了一个测试脚本,它看起来像失踪CRLFs的问题是:

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

+0

我来看看这个,因为它看起来很合理,而且这是我第一次尝试在真实服务器上抛出这个手卷逻辑的多部分/表单数据输出。当我沉迷于相关的RFC时,也许我只是错过了CRLF。谢谢,我会眯着眼睛看看并报告。 – Bob77

+0

就是这样!感谢您找出答案。我也遇到了似乎是一个众所周知的UrlMon(微软,IE的HTTP/FTP传输层堆栈)问题,其中一个接收'204无内容'的非GET方法报告状态为'1223未知'且响应头不可用。 :(但是很容易破解。对于我所知道的他们的WinHTTP堆栈有相同的缺陷(或特征?)。 – Bob77

+0

无关联的供货信息:微软的HTTP堆栈在本地代码应用程序中没有提供WebSocket支持,直到Windows 8似乎已被锁定到他们的WinHTTP库中。所以,因为许多人会在Win7上呆多年,并且不会将所有东西都移到.Net中,所以人们需要第三方库来支持WebSocket。 – Bob77

相关问题