Einen CURL-Aufruf in C # tätigen

Ich möchte den folgenden Curl-Aufruf in meiner C # -Konsolenanwendung ausführen:

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

Ich habe versucht, die hier gestellte Frage zu erledigen, aber ich kann die Eigenschaften nicht richtig ausfüllen.

Ich habe auch versucht, es in eine reguläre HTTP-Anfrage umzuwandeln:

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

Kann ich einen cURL-Aufruf in eine HTTP-Anfrage konvertieren? Wenn das so ist, wie? Wenn nicht, wie kann ich den obigen cURL-Aufruf von meiner C # -Konsolenanwendung richtig machen?

Solutions Collecting From Web of "Einen CURL-Aufruf in C # tätigen"

Nun, Sie würden cURL nicht direkt aufrufen, sondern Sie würden eine der folgenden Optionen verwenden:

  • HttpWebRequest / HttpWebResponse
  • WebClient
  • HttpClient (ab .NET 4.5 verfügbar)

Ich würde wärmstens empfehlen, die HttpClient class zu verwenden, da sie (von einem Usability-Standpunkt aus betrachtet) viel besser ist als die vorherigen beiden.

In Ihrem Fall würden Sie dies tun:

 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()); } 

Beachten Sie außerdem, dass die HttpClient class viel bessere Unterstützung für die Verarbeitung unterschiedlicher Antworttypen und eine bessere Unterstützung für asynchrone Vorgänge (und die Aufhebung von ihnen) über die zuvor genannten Optionen bietet.

Oder in RuheScharf :

 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); 

Unten ist ein funktionierender Beispielcode.

Bitte beachten Sie, dass Sie einen Verweis auf Newtonsoft.Json.Linq hinzufügen müssen

 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(); 

Referenz: TheDeveloperBlog.com