2015-09-21 5 views
0

Кому-то, кто наткнулся на это: это касается API Pushbullet, отмеченного тегами.Загрузить: 500 Внутренняя ошибка сервера

Попытка этого в первый раз.

У меня, кажется, есть хороший ответ на мой запрос на отправку, и я уверен, что у меня есть правильный 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 - это строка, созданная в тандеме с данными тела. UploadUrl - это строка со значением, возвращаемым в предыдущем ответе (Upload Request). 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 Internal Server Error с сообщением об ошибке «Произошла необработанная ошибка сервера».

Тело - это волосы под 3,5 кг. Я склоняюсь к таким понятиям, как ... возможно, требуется кодирование с кодировкой?

Любые подсказки? Дополнительная информация может помочь?

+0

сервер может помочь. –

+0

В худшем случае вы должны получить 400, а не 500, я посмотрю, смогу ли я найти то, что проблема. –

ответ

1

Прежде всего, я хочу извиниться за то, что вы загружаете файл, multipart/form-data, к сожалению, трудно создать на самом деле, поскольку на нескольких языках есть стандартные библиотеки, которые это делают. У меня есть версия, в которой вы просто загружаете байты напрямую, но пока не готовы к выпуску.

Я вижу некоторые ошибки «неожиданного EOF» в журналах, поэтому могу только предположить, что это то, что происходит здесь. Я еще не запускал никаких тестов, но думаю, что у вас недостаточно {CRLF} s или какой-либо другой незначительной ошибки. Если вы можете создать кодированные данные с существующей библиотекой, тогда сравните ее с вашим выходом, что было бы идеально.

Я попытаюсь заставить сервер вернуть 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 

Обратите внимание на CRLF после байт части PNG изображения, я думаю, вам не хватает тех

+0

Я посмотрю на это, потому что это кажется очень правдоподобным, и это первый раз, когда я пытался бросить этот многопроцессорный/form-data данных ручной работы на реальном сервере. Возможно, я просто пропустил этот CRLF, когда я просмотрел соответствующий RFC. Спасибо, я пощупаю его и отчитаю. – Bob77

+0

Вот и все! Спасибо, что поняли. Я также столкнулся с тем, что кажется хорошо известным UrlMon (стеком транспортного потока HTTP/FTP в Microsoft, IE), где не-GET-метод, получающий «204 No Content», сообщает о состоянии «1223 Unknown» с недоступными заголовками ответа , :(Но достаточно легко взломать. Насколько я знаю, их стек WinHTTP имеет тот же недостаток (или особенность?). – Bob77

+0

Несвязанный FYI: HTTP-стеки Microsoft не поддерживают поддержку WebSocket для приложений с собственными кодами до Windows 8, где, похоже, они были загружены в свою библиотеку WinHTTP. Так как многие из них будут оставаться на Win7 в течение многих лет и не будут перемещать все в .Net, людям нужны сторонние библиотеки для поддержки WebSocket. – Bob77