0

これに出くわした人へ: これは、タグ付けされた Pushbullet API に関するものです。

これは初めての試みです。

アップロード リクエストに対して適切な応答が得られたようで、正しいアップロード 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以下の毛です。私は次のような概念に陥っています...おそらくチャンクエンコーディングがここで必要ですか?

手がかりはありますか?さらにどのような情報が役立ちますか?

4

1 に答える 1

1

最初に、ファイルのアップロードについてお詫びしたいと思います。残念ながら multipart/form-data を実際に作成するのは困難です。これを行う標準ライブラリを持っている言語はほとんどないからです。バイトを直接アップロードするだけのバージョンがありますが、まだリリースする準備が整っていません。

ログに「予期しない EOF」エラーがいくつか表示されるので、それがここで起こっていることだとしか思えません。まだテストを実行していませんが、十分な {CRLF} がないか、その他の小さなエラーがあると思います。既存のライブラリを使用してエンコードされたデータを作成し、それを出力と比較できれば理想的です。

この場合、サーバーが 400 を返すようにしますが、「無効なマルチパート ボディ」になると思います。

テスト スクリプトを作成しましたが、CRLF の欠落が問題のようです。

--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に注意してください。それらが欠けていると思います

于 2015-09-21T23:25:04.853 に答える