2013-03-20 90 views

回答

3

您需要使用setopt,以便为卷曲请求指定POST选项。您应该首先看到的选项是CURLOPT_POSTCURLOPT_POSTFIELDS。从libcurl documentationnode-curl链接:

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

... [这]应该是完整的数据在HTTP POST操作后。您必须确保数据的格式与您希望服务器接收数据的方式相同。 libcurl不会为你转换或编码。大多数网络服务器会假定这些数据是经过网址编码的。

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

如果你想做一个零字节的POST,你需要明确地将CURLOPT_POSTFIELDSIZE设置为零,就像简单地将CURLOPT_POSTFIELDS设置为NULL或者“”只是有效地禁止发送指定的字符串。相反,libcurl会假设您将使用读取回调来发送POST数据!


有了这些信息,你应该能够将以下选项添加到低级别的例子有它做一个POST请求:

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

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

+0

怎么样发布块的数据块,因为我必须处理巨大的数据(500 MB可能)。任何帮助.. – Somnath 2013-04-05 13:21:00

+0

这会很棘手 - 你确定你想用HTTP来代替不同的协议吗?如果您需要使用HTTP,您可能需要查看使用多部分上传:http://stackoverflow.com/questions/788877/what-is-a-multipart-http-post-and-how-to-make -IT-scribd – 2013-04-05 13:48:30