2015-04-08 59 views
1

我正在嘗試使用libcurl.net連接到服務器並從中返回json。但不是返回JSON,而是返回「CURLE_OK」。繼承人我的代碼:如何使用libcurl.net(C#)返回JSON?

Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_WIN32); 
Easy easy = new Easy(); 
var agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"; 
easy.SetOpt(CURLoption.CURLOPT_URL, string.Format("http://vikinglogue.com/api/get_posts/?page={0}", currentPage)); 
easy.SetOpt(CURLoption.CURLOPT_HTTPGET, 1); 
easy.SetOpt(CURLoption.CURLOPT_USERAGENT, agent); 
easy.SetOpt(CURLoption.CURLOPT_TRANSFERTEXT, 1); 
var responce = easy.Perform(); 
MessageBox.Show(responce.ToString()); 
easy.Cleanup(); 

任何人都知道我在做什麼錯在這裏?請不要使用WebClient提出答案,因爲我不能使用它(不是由選擇)。謝謝。

回答

1

您可能希望CURLOPT_TRANSFERTEXT的行爲像PHP的CURLOPT_RETURNTRANSFER。它沒有,因爲前者被記錄爲「告訴圖書館使用ASCII模式進行ftp傳輸」,這在這種情況下完全不相關,因爲它是HTTP請求。

EasyGet樣品,你需要一個回調傳遞給寫入功能:

public static void Main(String[] args) 
{ 
    try { 
     Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); 

     Easy easy = new Easy(); 
     Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData); 

     easy.SetOpt(CURLoption.CURLOPT_URL, args[0]); 
     easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf); 
     easy.Perform(); 
     easy.Cleanup(); 

     Curl.GlobalCleanup(); 
    } 
    catch(Exception ex) { 
     Console.WriteLine(ex); 
    } 
} 

public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, 
    Object extraData) 
{ 
    Console.Write(System.Text.Encoding.UTF8.GetString(buf)); 
    return size * nmemb; 
} 
相關問題