Est-il possible d’envoyer des données à partir d’une application C # vers un site Web / un serveur Web?

J’espère que quelqu’un pourra m’aider avec une requête qui me déconcerte depuis longtemps.

Est-il possible d’envoyer des données d’une application C # à une page Web en ouvrant le navigateur, par exemple si vous avez un formulaire de connexion en ligne et souhaitez publier un nom d’utilisateur et un mot de passe pour ce formulaire depuis votre application C #.

Je vois quelque chose comme un navigateur ouvert vers la page des formulaires et publie les informations de connexion sur cette page à partir du programme, puis la page peut traiter le formulaire tout de suite, les connectant et les envoyant à la page d’accueil. Est-ce possible?

Merci d’avance

Paul

Oui.

Vous pouvez communiquer avec des pages Web ou des serveurs Web (ou des services Web) à l’aide de HttpWebRequest. C’est le code que j’utilise pour obtenir des données à partir d’une URL facebook:

internal static ssortingng FbFetch(ssortingng url) { var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; using (var response = (HttpWebResponse)request.GetResponse()) { using (var reader = new StreamReader(response.GetResponseStream())) { var responseText = reader.ReadToEnd(); return responseText; } } } 

Mais, ce que vous décrivez est appelé “HTML screen scraping” et cela peut être une approche fastidieuse et fragile pour la création d’applications. Fastidieux car il est difficile de se vautrer dans tous les bonbons de l’interface, et fragile parce que si le concepteur de la page modifie sa page, votre écran ne fonctionnera plus.

bonne chance.

Pour répondre à votre question concernant un message HTTP (avec pièce jointe), il est beaucoup plus difficile – à cause des pièces jointes. C’est le code que j’utilise pour publier des images sur FaceBook.

  ///  /// Create a new HttpWebRequest with the default properties for HTTP POSTS ///  /// The URL to be posted to /// The refer /// CookieContainer that should be used in this request /// The post data private ssortingng CreateHttpWebUploadRequest(ssortingng url, ssortingng referer, CookieContainer cookies, NameValueCollection postData, FileInfo fileData, ssortingng fileContentType) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); ssortingng boundary = "----------" + DateTime.UtcNow.Ticks.ToSsortingng("x", CultureInfo.InvariantCulture); // set the request variables request.Method = WebRequestMethods.Http.Post; request.ContentType = "multipart/form-data; boundary=" + boundary; request.CookieContainer = cookies; request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.55 Safari/533.4"; request.Accept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, */*"; request.Headers.Add("Accept-Encoding: gzip,deflate"); request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; request.Headers.Add("Accept-Language: en-us"); request.Referer = referer; request.KeepAlive = true; request.AllowAutoRedirect = false; // process through the fields SsortingngBuilder sbHeader = new SsortingngBuilder(); // add form fields, if any if (postData != null) { foreach (ssortingng key in postData.AllKeys) { ssortingng[] values = postData.GetValues(key); if (values != null) { foreach (ssortingng value in values) { if (!ssortingng.IsNullOrEmpty(value)) sbHeader.AppendFormat("--{0}\r\n", boundary); sbHeader.AppendFormat("Content-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}\r\n", key, value); } } } } if (fileData != null) { sbHeader.AppendFormat("--{0}\r\n", boundary); sbHeader.AppendFormat("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n", "media", fileData.Name); sbHeader.AppendFormat("Content-Type: {0}\r\n\r\n", fileContentType); } byte[] header = Encoding.UTF8.GetBytes(sbHeader.ToSsortingng()); byte[] footer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); long contentLength = header.Length + (fileData != null ? fileData.Length : 0) + footer.Length; // set content length request.ContentLength = contentLength; using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(header, 0, header.Length); // write the uploaded file if (fileData != null) { // write the file data, if any byte[] buffer = new Byte[fileData.Length]; var bytesRead = fileData.OpenRead().Read(buffer, 0, (int)(fileData.Length)); requestStream.Write(buffer, 0, bytesRead); } // write footer requestStream.Write(footer, 0, footer.Length); requestStream.Flush(); requestStream.Close(); using (var response = request.GetResponse() as HttpWebResponse) { using (var stIn = new System.IO.StreamReader(response.GetResponseStream())) { return stIn.ReadToEnd(); } } } } 

Mise à jour Et pour le compléter, voici le code des publications sans avoir besoin de pièce jointe. Encore une fois, j’utilise ce code pour publier sur FaceBook.

  ///  /// Create a new HttpWebRequest with the default properties for HTTP POSTS ///  /// The URL to be posted to /// The refer /// CookieContainer that should be used in this request /// The post data (needs to be formatted in name=value& format private ssortingng CreateHttpWebPostRequest(ssortingng url, ssortingng referer, CookieContainer cookies, NameValueCollection postData) { var sbPostData = new SsortingngBuilder(); if (postData != null) { foreach (ssortingng key in postData.AllKeys) { ssortingng[] values = postData.GetValues(key); if (values != null) { foreach (ssortingng value in values) { if (!ssortingng.IsNullOrEmpty(value)) sbPostData.Append(ssortingng.Format("{0}={1}&", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value))); } } } } var parameterSsortingng = Encoding.UTF8.GetBytes(sbPostData.ToSsortingng()); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = WebRequestMethods.Http.Post; request.CookieContainer = cookies; request.ContentLength = parameterSsortingng.Length; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.55 Safari/533.4"; request.Accept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, */*"; request.Headers.Add("Accept-Encoding: gzip,deflate"); request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; request.Headers.Add("Accept-Language: en-us"); request.Referer = referer; request.KeepAlive = true; request.AllowAutoRedirect = false; using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(parameterSsortingng, 0, parameterSsortingng.Length); requestStream.Close(); using (var response = request.GetResponse() as HttpWebResponse) { using (var stIn = new System.IO.StreamReader(response.GetResponseStream())) { return stIn.ReadToEnd(); } } } } 

Vous pouvez automatiser le contrôle du navigateur Web directement en C #. Contrairement à HttpWebRequest, cela fonctionnera avec n’importe quel site Web.

Mais si vous avez plus d’argent que le temps, envisagez d’utiliser un composant commercial.