Выполнение вызова 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