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

3 ответа:

Ну, вы бы не позвонили cURL непосредственно, скорее, вы бы использовали один из следующих вариантов:

я настоятельно рекомендую использовать 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