如何使用node-curl发布数据?

时间:2013-03-20 13:32:59

标签: node.js post curl npm

我对使用node.js的LINUX很新。这只是我的第二天。我使用node-curl作为curl请求。在下面的链接中,我找到了Get请求的示例。任何人都可以使用node-curl为我提供Post请求示例。

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

1 个答案:

答案 0 :(得分:5)

您需要使用setopt来指定cURL请求的POST选项。您应首先考虑的选项是CURLOPT_POSTCURLOPT_POSTFIELDS。来自node-curl链接的libcurl documentation

  

CURLOPT_POST

     

设置为1的参数告诉库执行常规HTTP发布。这也将使库使用“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]应该是在HTTP POST操作中发布的完整数据。您必须确保数据的格式与服务器接收数据的方式相同。 libcurl不会为您转换或编码。大多数Web服务器都会假设这些数据是url编码的。

     

此POST是一种普通的application / x-www-form-urlencoded类型(当使用此选项时,libcurl将默认设置Content-Type),这是HTML表单最常用的一种。另请参见CURLOPT_POST。使用CURLOPT_POSTFIELDS意味着CURLOPT_POST。

     

如果要进行零字节POST,则需要将CURLOPT_POSTFIELDSIZE显式设置为零,因为只需将CURLOPT_POSTFIELDS设置为NULL或“”只是有效地禁用指定字符串的发送。相反,libcurl会假设你将使用read回调发送POST数据!


使用该信息,您应该能够将以下选项添加到低级示例中,以使其发出POST请求:

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

您需要调整fieldsStr的内容以匹配服务器所期望的格式。根据文档,您可能还需要对数据进行网址编码 - 这应该像根据this post使用encodeURIComponent一样简单。