2

マルチパートPOSTリクエストの送信についてサポートが必要です。主な問題は、サーバーがリクエストの投稿本文部分を認識しないことです。サーバー側はAndroidで正常に動作していますが、QtとNetworkAccessManagerでは動作していません。

コードは次のとおりです。

ここで、リクエストで送信するbodyPartを作成します(transferDataはテキストを含むQByteArrayです):

postBody.append("\r\n--"+ boundary + "\r\n");
postBody.append("Content-Disposition: form-data; name=\"auth\" \r\n");
postBody.append(" \r\n");
postBody.append(auth + " \r\n");
postBody.append("--"+ boundary + "\r\n");
postBody.append("Content-Disposition: form-data; name=\"upload-test-data\" \r\n");
postBody.append(" \r\n");
postBody.append(transferData + " \r\n");
postBody.append("--"+ boundary + "\r\n");
postBody.append("Content-Disposition: form-data; name=\"upload-checksum\" \r\n");
postBody.append(" \r\n");
postBody.append(checksum.toHex() + " \r\n");
postBody.append("\r\n--" + boundary + "--\r\n");

ヘッダーは次のとおりです。

request.setRawHeader("User-Agent", "MyApp 1.0");
request.setRawHeader("Content-Type", "multipart/form-data; boundary="+boundary.toAscii());
request.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(postBody.size()).toAscii());
4

2 に答える 2

2

「Content-Type」を設定した後、「Content-Length」ヘッダーを追加してみてください。値はのようなものでなければなりませんQString::number(postBody.length())。(編集:これは問題を修正しませんでした)。

新しい行(\ r \ n)が機能する前に余分なスペースを削除します。postBody.append( "\ r \ n")をpostBody.append( "\ r \ n")に変更してください

于 2011-06-21T09:56:54.370 に答える
1

Qt 4.8以降、トリックを実行するQHttpMultiPartクラスが登場しました。

于 2014-11-18T22:00:32.647 に答える