4

私は、node.jsを使用するLINUXを初めて使用します。ちょうど2日目です。curlリクエストにはnode-curlを使用します。以下のリンクで、Getリクエストの例を見つけました。node-curlを使用したPostリクエストの例を誰かに教えてもらえますか?

https://github.com/jiangmiao/node-curl/blob/master/examples/low-level.js

4

1 に答える 1

5

setoptcURLリクエストのPOSTオプションを指定するにはを使用する必要があります。最初に検討を開始する必要があるオプションはCURLOPT_POST、およびCURLOPT_POSTFIELDSです。からリンクされているlibcurlドキュメントnode-curlから:

CURLOPT_POST

パラメータを1に設定すると、ライブラリに通常のHTTPPOSTを実行するように指示されます。これにより、ライブラリで「Content-Type:application/x-www-form-urlencoded」ヘッダーも使用されるようになります。(これは、これまでで最も一般的に使用されているPOSTメソッドです)。

CURLOPT_POSTFIELDSまたはCURLOPT_COPYPOSTFIELDSオプションのいずれかを使用して、投稿するデータを指定し、CURLOPT_POSTFIELDSIZEまたはCURLOPT_POSTFIELDSIZE_LARGEを使用してデータサイズを設定します。

オプションで、CURLOPT_READFUNCTIONおよびCURLOPT_READDATAオプションを使用してPOSTにデータを提供できますが、CURLOPT_POSTFIELDSをNULL以外に設定しないようにする必要があります。コールバックを使用してデータを提供する場合は、チャンク転送エンコーディングを使用してデータを送信するか、CURLOPT_POSTFIELDSIZEまたはCURLOPT_POSTFIELDSIZE_LARGEオプションを使用してデータのサイズを設定する必要があります。チャンクエンコーディングを有効にするには、適切なTransfer-Encodingヘッダーを渡すだけです。post-callback.cの例を参照してください。

CURLOPT_POSTFIELDS

... [this]は、HTTPPOST操作で投稿する完全なデータである必要があります。サーバーがデータを受信する方法でデータがフォーマットされていることを確認する必要があります。libcurlはそれを変換またはエンコードしません。ほとんどのWebサーバーは、このデータがURLエンコードされていると想定します。

このPOSTは、通常のapplication / x-www-form-urlencodedの種類です(このオプションを使用すると、libcurlはデフォルトでそのContent-Typeを設定します)。これは、HTMLフォームで最も一般的に使用されるものです。CURLOPT_POSTも参照してください。CURLOPT_POSTFIELDSを使用することは、CURLOPT_POSTを意味します。

ゼロバイトのPOSTを実行する場合は、CURLOPT_POSTFIELDSを明示的にゼロに設定する必要があります。CURLOPT_POSTFIELDSをNULLまたは ""に設定するだけで、指定した文字列の送信が事実上無効になるためです。libcurlは、代わりに、読み取りコールバックを使用してPOSTデータを送信すると想定します。


その情報を使用して、低レベルの例に次のオプションを追加して、POSTリクエストを実行できるようにする必要があります。

var fieldsStr = '{}';
curl.setopt('CURLOPT_POST', 1); // true?
curl.setopt('CURLOPT_POSTFIELDS', fieldsStr);

fieldsStrサーバーが期待する形式に一致するように、の内容を微調整する必要があります。ドキュメントによると、データをurlエンコードする必要がある場合もあります。これは、この投稿encodeURIComponentに従って使用するのと同じくらい簡単なはずです。

于 2013-03-20T14:07:26.340 に答える