2015-09-21 347 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

相關問題