2013-03-20 84 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