1

私は http ストリームで音声を送信するプロジェクトに取り組んでいます。現在、Http バックエンドに CURL を使用しています。「Transfer-Encoding: chunked」を使用する必要がある場合は、ストリームの合計サイズ/ 「Content-length:」に言及する必要があることがわかりました。現在、コンテンツの合計サイズがわかるストリームが完了するのを待っています。これは機能しますが、大幅な遅延を引き起こしています。入力のコンテンツ全体の長さを知らずに、データをチャンクでアップロードする方法を知りたいです。

curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "オーディオ", CURLFORM_CONTENTTYPE, MULTI_PART_CONTENT_TYPE_AUDIO, CURLFORM_STREAM, &(*(aBufffer)),
CURLFORM_CONTENTSLENGTH,bufferSize, CURLFORM_END);

the documentation for "CURLFORM_STREAM" specifies that it is mandatory to specify "CURLFORM_CONTENTSLENGTH" . I need to use "CURLFORM_STREAM" because my buffer is big and I want curl to call "CURLOPT_READFUNCTION" to post the remaining data.

4

2 に答える 2

0

content-lengthの http 要求ヘッダー仕様とメッセージ本文POSTを調べると、ヘッダーが指定されている限り、このヘッダーは要求に対してオプションである可能性があることがわかりTransfer-Encodingます。

いずれかのヘッダーが存在する場合、サーバーはメッセージ本文を探します。

問題は、メッセージが完全に受信されたかどうかをサーバー上で把握する方法を見つけなければならないことです。

于 2016-09-06T04:59:37.347 に答える
0

ヘッダーを設定して、チャンク エンコーディングを使用して POST を実行するように libcurl に指示します。以下の例を参照してください。いずれにせよ、libcurl はその要求で a を渡さないので、単純に嘘をついてCURLFORM_CONTENTSLENGTHゼロ以外の値を設定することができます。Content-Length:

struct curl_slist *headerlist =
   curl_slist_append(NULL, "Transfer-Encoding: chunked");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

/* pass in the created formpost data */
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

/* send the entire thing away */
curl_easy_perform(curl);
于 2016-09-12T07:05:58.727 に答える