Выполнение вызова cURL в C#
Я хочу сделать следующий вызов curl в моем консольном приложении C#:
curl -d "text=This is a block of text"
http://api.repustate.com/v2/demokey/score.json
Я пытался сделать, как вопрос, опубликованный здесь, но я не могу заполнить свойства должным образом.
Я попытался преобразовать его в обычный HTTP запрос:
http://api.repustate.com/v2/demokey/score.json?text="This%20is%20a%20block%20of%20text"
можно ли преобразовать вызов cURL в HTTP-запрос? Если да, то как? Если нет, то как я могу сделать вышеуказанный вызов cURL из моего консольного приложения C# правильно?
3 ответа:
Ну, вы бы не позвонили cURL непосредственно, скорее, вы бы использовали один из следующих вариантов:
HttpWebRequest
/HttpWebResponse
WebClient
HttpClient
(доступно с .NET 4.5 on)я настоятельно рекомендую использовать
HttpClient
класс, так как он спроектирован намного лучше (с точки зрения удобства использования), чем первые два.In ваш случай, вы бы сделали это:
using System.Net.Http; var client = new HttpClient(); // Create the HttpContent for the form to be posted. var requestContent = new FormUrlEncodedContent(new [] { new KeyValuePair<string, string>("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()); }
также обратите внимание, что
HttpClient
класс имеет гораздо лучшую поддержку для обработки различных типов ответов, а также лучшую поддержку асинхронных операций (и их отмены) по сравнению с ранее упомянутыми опциями.
или 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);
Ниже приведен рабочий пример кода.
обратите внимание, что вам нужно добавить ссылку на 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<JObject>()) { foreach (JProperty p in o.Properties()) { string name = p.Name; string value = p.Value.ToString(); Console.Write(name + ": " + value); } } Console.ReadLine();
Ссылка:TheDeveloperBlog.com