Fazendo uma chamada cURL em c #

Eu quero fazer a seguinte chamada de onda no meu aplicativo de console C #:

curl -d "text=This is a block of text" http://api.repustate.com/v2/demokey/score.json 

Eu tentei fazer como a questão postada aqui , mas não posso preencher as propriedades corretamente.

Eu também tentei convertê-lo em uma solicitação HTTP regular:

 http://api.repustate.com/v2/demokey/score.json?text="This%20is%20a%20block%20of%20text" 

Posso converter uma chamada cURL em uma solicitação HTTP? Se sim, como? Se não, como posso fazer a chamada cURL acima do meu aplicativo de console c # corretamente?

Bem, você não chamaria cURL diretamente, em vez disso, usaria uma das seguintes opções:

  • HttpWebRequest / HttpWebResponse
  • WebClient
  • HttpClient (disponível no .NET 4.5)

Eu recomendo usar a class HttpClient , pois ela foi projetada para ser muito melhor (do ponto de vista da usabilidade) do que as duas anteriores.

No seu caso, você faria isso:

 using System.Net.Http; var client = new HttpClient(); // Create the HttpContent for the form to be posted. var requestContent = new FormUrlEncodedContent(new [] { new KeyValuePair("text", "This is a block of text"), }); // Get the response. HttpResponseMessage response = await client.PostAsync( "http://api.repustate.com/v2/demokey/score.json", requestContent); // Get the response content. HttpContent responseContent = response.Content; // Get the stream of the content. using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync())) { // Write the output. Console.WriteLine(await reader.ReadToEndAsync()); } 

Observe também que a class HttpClient tem suporte muito melhor para lidar com diferentes tipos de resposta e melhor suporte para operações assíncronas (e o cancelamento delas) sobre as opções mencionadas anteriormente.

Ou em restSharp :

 var client = new RestClient("https://example.com/?urlparam=true"); var request = new RestRequest(Method.POST); request.AddHeader("content-type", "application/x-www-form-urlencoded"); request.AddHeader("cache-control", "no-cache"); request.AddHeader("header1", "headerval"); request.AddParameter("application/x-www-form-urlencoded", "bodykey=bodyval", ParameterType.RequestBody); IRestResponse response = client.Execute(request); 

Abaixo está um código de exemplo de trabalho.

Por favor, note que você precisa adicionar uma referência ao Newtonsoft.Json.Linq

 string url = "https://yourAPIurl" WebRequest myReq = WebRequest.Create(url); string credentials = "xxxxxxxxxxxxxxxxxxxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; CredentialCache mycache = new CredentialCache(); myReq.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(credentials)); WebResponse wr = myReq.GetResponse(); Stream receiveStream = wr.GetResponseStream(); StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); string content = reader.ReadToEnd(); Console.WriteLine(content); var json = "[" + content + "]"; // change this to array var objects = JArray.Parse(json); // parse as array foreach (JObject o in objects.Children()) { foreach (JProperty p in o.Properties()) { string name = p.Name; string value = p.Value.ToString(); Console.Write(name + ": " + value); } } Console.ReadLine(); 

Referência: TheDeveloperBlog.com