c# - HTTP पोस्ट वेब अनुरोध कैसे करें




.net post httpwebrequest httprequest (8)

आप IEnterprise.Easy-HTTP उपयोग कर सकते हैं क्योंकि यह क्लास पार्सिंग और क्वेरी बिल्डिंग में बनाया गया है:

await new RequestBuilder<ExampleObject>()
.SetHost("https://httpbin.org")
.SetContentType(ContentType.Application_Json)
.SetType(RequestType.Post)
.SetModelToSerialize(dto)
.Build()
.Execute();

मैं लाइब्रेरी का लेखक हूं इसलिए प्रश्न पूछने के लिए स्वतंत्र महसूस करें या github में कोड की जांच करें

मैं HTTP अनुरोध कैसे कर सकता हूं और POST विधि का उपयोग करके कुछ डेटा भेज सकता हूं? मैं अनुरोध GET कर सकता हूं लेकिन कोई POST


सरल अनुरोध प्राप्त करें

using System.Net;

...

using (var wb = new WebClient())
{
    var response = wb.DownloadString(url);
}

सरल पोस्ट अनुरोध

using System.Net;
using System.Collections.Specialized;

...

using (var wb = new WebClient())
{
    var data = new NameValueCollection();
    data["username"] = "myUser";
    data["password"] = "myPassword";

    var response = wb.UploadValues(url, "POST", data);
    string responseInString = Encoding.UTF8.GetString(response);
}

MSDN का नमूना है।

using System;
using System.IO;
using System.Net;
using System.Text;

namespace Examples.System.Net
{
    public class WebRequestPostExample
    {
        public static void Main()
        {
            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create("http://www.contoso.com/PostAccepter.aspx");
            // Set the Method property of the request to POST.
            request.Method = "POST";
            // Create POST data and convert it to a byte array.
            string postData = "This is a test that posts this string to a Web server.";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream();
            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();
            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.
            Console.WriteLine(responseFromServer);
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();
        }
    }
}

HTTP GET और POST अनुरोध करने के कई तरीके हैं:

विधि ए: एचटीपी क्लाइंट

इसमें उपलब्ध: .NET Framework 4.5+, .NET मानक 1.1+, .NET कोर 1.0+

वर्तमान में पसंदीदा दृष्टिकोण। अतुल्यकालिक। NuGet माध्यम से उपलब्ध अन्य प्लेटफार्मों के लिए पोर्टेबल संस्करण।

using System.Net.Http;

सेट अप

आपके आवेदन के जीवनकाल के लिए एक HttpClient को तुरंत चालू करने और इसे साझा करने की recommended की recommended है।

private static readonly HttpClient client = new HttpClient();

पद

var values = new Dictionary<string, string>
{
   { "thing1", "hello" },
   { "thing2", "world" }
};

var content = new FormUrlEncodedContent(values);

var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);

var responseString = await response.Content.ReadAsStringAsync();

प्राप्त

var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");

विधि बी: तृतीय पक्ष पुस्तकालय

RestSharp

आरईएसटी एपीआई के साथ बातचीत के लिए लाइब्रेरी की कोशिश की और परीक्षण किया। पोर्टेबल। NuGet माध्यम से उपलब्ध है।

Flurl.Http

नई लाइब्रेरी एक धाराप्रवाह एपीआई और परीक्षण सहायक मदद कर रही है। हुड के नीचे HttpClient। पोर्टेबल। NuGet माध्यम से उपलब्ध है।

using Flurl.Http;

पद

var responseString = await "http://www.example.com/recepticle.aspx"
    .PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })
    .ReceiveString();

प्राप्त

var responseString = await "http://www.example.com/recepticle.aspx"
    .GetStringAsync();

विधि सी: विरासत

इसमें उपलब्ध: .NET Framework 1.1+, .NET मानक 2.0+, .NET कोर 1.0+

using System.Net;
using System.Text;  // for class Encoding
using System.IO;    // for StreamReader

पद

var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");

var postData = "thing1=hello";
    postData += "&thing2=world";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

प्राप्त

var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

विधि डी: वेब क्लाइंट (अब भी विरासत)

इसमें उपलब्ध: .NET Framework 1.1+, .NET मानक 2.0+, .NET कोर 2.0+

using System.Net;
using System.Collections.Specialized;

पद

using (var client = new WebClient())
{
    var values = new NameValueCollection();
    values["thing1"] = "hello";
    values["thing2"] = "world";

    var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);

    var responseString = Encoding.Default.GetString(response);
}

प्राप्त

using (var client = new WebClient())
{
    var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");
}

यह जेएसओएन प्रारूप में डेटा भेजने / प्राप्त करने का एक पूर्ण कामकाजी उदाहरण है, मैंने वीएस2013 एक्सप्रेस संस्करण का उपयोग किया

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;

namespace ConsoleApplication1
{
    class Customer
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
    }

    public class Program
    {
        private static readonly HttpClient _Client = new HttpClient();
        private static JavaScriptSerializer _Serializer = new JavaScriptSerializer();

        static void Main(string[] args)
        {
            Run().Wait();
        }

        static async Task Run()
        {
            string url = "http://www.example.com/api/Customer";
            Customer cust = new Customer() { Name = "Example Customer", Address = "Some example address", Phone = "Some phone number" };
            var json = _Serializer.Serialize(cust);
            var response = await Request(HttpMethod.Post, url, json, new Dictionary<string, string>());
            string responseText = await response.Content.ReadAsStringAsync();

            List<YourCustomClassModel> serializedResult = _Serializer.Deserialize<List<YourCustomClassModel>>(responseText);

            Console.WriteLine(responseText);
            Console.ReadLine();
        }

        /// <summary>
        /// Makes an async HTTP Request
        /// </summary>
        /// <param name="pMethod">Those methods you know: GET, POST, HEAD, etc...</param>
        /// <param name="pUrl">Very predictable...</param>
        /// <param name="pJsonContent">String data to POST on the server</param>
        /// <param name="pHeaders">If you use some kind of Authorization you should use this</param>
        /// <returns></returns>
        static async Task<HttpResponseMessage> Request(HttpMethod pMethod, string pUrl, string pJsonContent, Dictionary<string, string> pHeaders)
        {
            var httpRequestMessage = new HttpRequestMessage();
            httpRequestMessage.Method = pMethod;
            httpRequestMessage.RequestUri = new Uri(pUrl);
            foreach (var head in pHeaders)
            {
                httpRequestMessage.Headers.Add(head.Key, head.Value);
            }
            switch (pMethod.Method)
            {
                case "POST":
                    HttpContent httpContent = new StringContent(pJsonContent, Encoding.UTF8, "application/json");
                    httpRequestMessage.Content = httpContent;
                    break;

            }

            return await _Client.SendAsync(httpRequestMessage);
        }
    }
}

सरल (एक-लाइनर, कोई त्रुटि जांच नहीं, प्रतिक्रिया के लिए कोई प्रतीक्षा नहीं) समाधान मुझे अब तक मिला है

(new WebClient()).UploadStringAsync(new Uri(Address), dataString);‏

सावधानी से प्रयोग करें!


FormUrlEncodedContent के बजाय POST के लिए Windows.Web.Http नेमस्पेस का उपयोग करते समय हम HttpFormUrlEncodedContent लिखते हैं। इसके अलावा प्रतिक्रिया HttpResponseMessage का प्रकार है। शेष इवान Mulawski लिखा है के रूप में बाकी है।


मैं document.forms जावा का उपयोग करता हूं और फॉर्म में सभी तत्व प्राप्त करने के लिए इसे लूप करता हूं, फिर xhttp के माध्यम से भेजता हूं। तो यह जावास्क्रिप्ट / AJAX सबमिट के लिए मेरा समाधान है (सभी एचटीएमएल एक उदाहरण के रूप में शामिल है):

          <!DOCTYPE html>
           <html>
           <body>
           <form>
       First name: <input type="text" name="fname" value="Donald"><br>
        Last name: <input type="text" name="lname" value="Duck"><br>
          Addr1: <input type="text" name="add" value="123 Pond Dr"><br>
           City: <input type="text" name="city" value="Duckopolis"><br>
      </form> 



           <button onclick="smc()">Submit</button>

                   <script>
             function smc() {
                  var http = new XMLHttpRequest();
                       var url = "yourphpfile.php";
                     var x = document.forms[0];
                          var xstr = "";
                         var ta ="";
                    var tb ="";
                var i;
               for (i = 0; i < x.length; i++) {
     if (i==0){ta = x.elements[i].name+"="+ x.elements[i].value;}else{
       tb = tb+"&"+ x.elements[i].name +"=" + x.elements[i].value;
             } }

           xstr = ta+tb;
      http.open("POST", url, true);
       http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

      http.onreadystatechange = function() {
          if(http.readyState == 4 && http.status == 200) {

        // do whatever you want to with the html output response here

                } 

               }
            http.send(xstr);

              }
         </script>

         </body>
     </html>






c# .net post httpwebrequest httprequest