Конкретная команда curl в C#
- Привет!
Я тут размышлял над одной маленькой проблемой,
у меня есть конкретная команда curl, которую нужно отправить с помощью C#, и мне нужно прочитать ответ от cUrl.
Я хотел бы поделиться командой, которую мне нужно "перевести", и моим решением для нее (которое не работает), и я надеюсь, что, возможно, кто-то сможет помочь мне решить эту проблему, я был бы благодарен за любые чаевые или альтернативы.
Прежде всего, команда cUrl
curl \ -v\ --cacert some_file_i_dont_get\ --cert some_certificate\ --key some_key\ -XPOST\ -H "Content-Type: multipart/form-data"\ -F "file=filepath"\ -F "filename=somefilename"\ SOME_URL
есть несколько вещей, которые я не понимаю, например, команда "F", я не уверен, но я верю, что она определяет имена и значения параметров?
во всяком случае, у меня возникли проблемы с переводом этой команды и особенно с тем, как добавить эти данные в HttpRequest на языке C#
Я собираюсь разместить свой код в разделе" Что вы пробовали", чтобы показать вам свою лучшую догадку
Что я уже пробовал:
public void MakeHttpsPostRequest() { //Creating the X.509 certificate. ########## // use the TLS protocol ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; // create HTTP web request with proper content type HttpWebRequest request = (HttpWebRequest)WebRequest.Create("someurl:443"); request.ContentType = "application/xml;charset=UTF8"; // grab the PFX as a X.509 certificate from disk string certFileName = Path.Combine("PATH TO FILE", "filename.file"); // load the X.509 certificate and add to the web request X509Certificate2 cert = new X509Certificate2(certFileName, "(top-secret password)"); //Set the Timeout. request.Timeout = 500; //Add certificate to request. request.ClientCertificates.Add(cert); request.PreAuthenticate = true; //WUT? //UserAgent. request.UserAgent = "My User Agent ?"; //HTTP verb. request.Method = "POST"; request.ContentType = "multipart/form-data"; StringBuilder postData = new StringBuilder(); postData.AppendUrlEncoded("cacert", "file"); postData.AppendUrlEncoded("cert", "file"); postData.AppendUrlEncoded("key", "file"); postData.AppendUrlEncoded("filename", "file.file"); postData.AppendUrlEncoded("file", "@filefile.file"); ASCIIEncoding ascii = new ASCIIEncoding(); byte[] postBytes = ascii.GetBytes(postData.ToString()); request.ContentLength = postBytes.Length; Stream postStream = request.GetRequestStream(); postStream.Write(postBytes,0,postBytes.Length); postStream.Flush(); postStream.Close(); //From HERE: Get HttpWebResponse. }
и расширение AppendUrlEncoded
public static void AppendUrlEncoded(this StringBuilder sb, string name, string value) { if (sb.Length != 0) sb.Append("&"); sb.Append(HttpUtility.UrlEncode(name)); sb.Append("="); sb.Append(HttpUtility.UrlEncode(value)); }