। নেট: ডেটা সহ পোষ্ট প্রতিক্রিয়া পাঠানোর সহজ উপায়


179

আমার অবাক করার মতো বিষয়, আমি NET বিসিএল-এ যা বলতে পারি তা থেকে আমি এর চেয়ে সহজ কিছু করতে পারি না:

byte[] response = Http.Post
(
    url: "http://dork.com/service",
    contentType: "application/x-www-form-urlencoded",
    contentLength: 32,
    content: "home=Cosby&favorite+flavor=flies"
);

উপরের এই হাইপোথটিকাল কোডটি ডেটা সহ একটি HTTP পোষ্ট তৈরি করে এবং Postএকটি স্ট্যাটিক শ্রেণীর কোনও পদ্ধতি থেকে প্রতিক্রিয়া ফিরিয়ে দেয় Http

যেহেতু আমরা এত সহজ কিছু না রেখেই চলেছি, এর পরের সেরা সমাধানটি কী?

আমি কীভাবে ডেটা সহ একটি এইচটিটিপি পোস্ট পাঠাব এবং প্রতিক্রিয়াটির সামগ্রীটি পেতে পারি?


এটি আসলে আমার জন্য নিখুঁতভাবে কাজ করেছে ... stickler.de/en/information/code-snippets/…
জেমি ট্যাবোন

উত্তর:


288
   using (WebClient client = new WebClient())
   {

       byte[] response =
       client.UploadValues("http://dork.com/service", new NameValueCollection()
       {
           { "home", "Cosby" },
           { "favorite+flavor", "flies" }
       });

       string result = System.Text.Encoding.UTF8.GetString(response);
   }

আপনার এইগুলির অন্তর্ভুক্তের প্রয়োজন হবে:

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

আপনি যদি স্ট্যাটিক পদ্ধতি / শ্রেণি ব্যবহারের জন্য জিদ করেন:

public static class Http
{
    public static byte[] Post(string uri, NameValueCollection pairs)
    {
        byte[] response = null;
        using (WebClient client = new WebClient())
        {
            response = client.UploadValues(uri, pairs);
        }
        return response;
    }
}

তারপরে সহজভাবে:

var response = Http.Post("http://dork.com/service", new NameValueCollection() {
    { "home", "Cosby" },
    { "favorite+flavor", "flies" }
});

3
আপনি যদি এইচটিটিপি শিরোলেখগুলিতে আরও নিয়ন্ত্রণ চান তবে আপনি এইচটিটিপিওয়েবরেইকাস্ট এবং রেফারেন্স আরএফসি 2616 ( w3.org/Protocols/rfc2616/rfc2616.txt ) ব্যবহার করে একই চেষ্টা করতে পারেন । Jball এবং BFree এর উত্তরগুলি সেই প্রচেষ্টাটিকে অনুসরণ করে।
ক্রিস হাচিনসন

9
এই উদাহরণটি আসলে প্রতিক্রিয়াটি পড়ে না, যা মূল প্রশ্নের একটি গুরুত্বপূর্ণ অংশ ছিল!
জন ওয়াট

4
প্রতিক্রিয়া পড়তে, আপনি করতে পারেন string result = System.Text.Encoding.UTF8.GetString(response)এই উত্তরটি আমি কোথায় খুঁজে পেয়েছি।
jporcenaluk

আপনি যদি উইন্ডোজ 8.1 এর জন্য একটি উইন্ডোজ স্টোর অ্যাপ্লিকেশন তৈরি করার চেষ্টা করছেন তবে ওয়েবক্লিয়েন্টটি সিস্টেম.নেটে পাওয়া যায়নি বলে এই পদ্ধতিটি আর কাজ করবে না। পরিবর্তে, রমেশের উত্তরটি ব্যবহার করুন এবং "অপেক্ষা করুন" এর ব্যবহারটি সন্ধান করুন।
স্টিফেন ওয়াইলি

2
আমি এটি প্লাস-ওয়ান করব, তবে আপনার উত্তরটি উন্নত করতে আপনার উত্তরটি জেপোসাইনালুক মন্তব্য অন্তর্ভুক্ত করা উচিত।
করগালোর

78

এইচটিপিপ্লিনেন্ট ব্যবহার করে: উইন্ডোজ 8 অ্যাপ্লিকেশন বিকাশের বিষয়ে যতটা উদ্বেগ রয়েছে, আমি এটি পেরিয়ে এসেছি।

var client = new HttpClient();

var pairs = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("pqpUserName", "admin"),
        new KeyValuePair<string, string>("password", "test@123")
    };

var content = new FormUrlEncodedContent(pairs);

var response = client.PostAsync("youruri", content).Result;

if (response.IsSuccessStatusCode)
{


}

6
একটি অভিধান <স্ট্রিং, স্ট্রিং> এর সাথেও কাজ করে, যা এটি পরিষ্কার করে।
পিটার হেডবার্গ

22
সর্বদা সেরা উত্তর .. ওহ প্রভুদের ধন্যবাদ, আমি আপনাকে ভালবাসি ধন্যবাদ। আমি লড়াই করে যাচ্ছি .. 2 আশ্চর্যজনক সপ্তাহসমূহ .. আপনার আমার সমস্ত পোস্ট দেখতে হবে। আর্গ এটির কাজ করছে, ইয়েহা << হুগস>
জিমিটে 1988

1
নোট করুন, যখন সম্ভব হয়, আপনি কল .Resultদিয়ে ব্যবহার করবেন না Async- awaitআপনার ইউআই থ্রেডটি ব্লক করবে না তা নিশ্চিত করতে ব্যবহার করুন । এছাড়াও, সরল new[]পাশাপাশি তালিকার পাশাপাশি কাজ করবে; অভিধান কোডটি পরিষ্কার করতে পারে তবে কিছু HTTP কার্যকারিতা হ্রাস করবে।
ম্যাট ডেক্রে

1
আজকাল (২০১)) এটির সেরা উত্তর। এইচটিপিপ্লিয়েন্টটি ওয়েবক্লিয়েন্টের চেয়ে নতুন (সবচেয়ে বেশি ভোট দেওয়া উত্তর) এবং এর উপর কিছু সুবিধা রয়েছে: 1) এটির একটি ভাল অ্যাসিঙ্ক প্রোগ্রামিং মডেল রয়েছে যা হেনরিক এফ নিলসন মূলত এইচটিটিপি-র উদ্ভাবকদের মধ্যে কাজ করেছেন, এবং তিনি এপিআই ডিজাইন করেছেন যাতে এটি আপনার HTTP স্ট্যান্ডার্ড অনুসরণ করা সহজ; 2) এটি। নেট ফ্রেমওয়ার্ক 4.5 দ্বারা সমর্থিত, সুতরাং এটি forseeable ভবিষ্যতের জন্য কিছু গ্যারান্টিযুক্ত স্তরের সমর্থন রয়েছে; 3) লাইব্রেরির xcopyable / পোর্টেবল-ফ্রেমওয়ার্ক সংস্করণটি যদি আপনি অন্যান্য প্ল্যাটফর্মগুলিতে ব্যবহার করতে চান - নেট নেট, উইন্ডোজ ফোন ইত্যাদি ...
লুইস গওভিয়া

কীভাবে httpclient দিয়ে ফাইল প্রেরণ করা যায়
দর্শন ডেভ

47

WebRequest ব্যবহার করুন । স্কট হ্যানসেলম্যান থেকে :

public static string HttpPost(string URI, string Parameters) 
{
   System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
   req.Proxy = new System.Net.WebProxy(ProxyString, true);
   //Add these, as we're doing a POST
   req.ContentType = "application/x-www-form-urlencoded";
   req.Method = "POST";
   //We need to count how many bytes we're sending. 
   //Post'ed Faked Forms should be name=value&
   byte [] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
   req.ContentLength = bytes.Length;
   System.IO.Stream os = req.GetRequestStream ();
   os.Write (bytes, 0, bytes.Length); //Push it out there
   os.Close ();
   System.Net.WebResponse resp = req.GetResponse();
   if (resp== null) return null;
   System.IO.StreamReader sr = 
         new System.IO.StreamReader(resp.GetResponseStream());
   return sr.ReadToEnd().Trim();
}

32
private void PostForm()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://dork.com/service");
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    string postData ="home=Cosby&favorite+flavor=flies";
    byte[] bytes = Encoding.UTF8.GetBytes(postData);
    request.ContentLength = bytes.Length;

    Stream requestStream = request.GetRequestStream();
    requestStream.Write(bytes, 0, bytes.Length);

    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader reader = new StreamReader(stream);

    var result = reader.ReadToEnd();
    stream.Dispose();
    reader.Dispose();
}

12

ব্যক্তিগতভাবে, আমি মনে করি একটি HTTP পোস্ট করার সহজ প্রতিক্রিয়া এবং প্রতিক্রিয়াটি হ'ল ওয়েবক্লিয়েন্ট ক্লাসটি ব্যবহার করা। এই শ্রেণিটি বিশদটি বিশদে বিমূর্ত করে। এমনকি এমএসডিএন ডকুমেন্টেশনে একটি পূর্ণ কোড উদাহরণ রয়েছে।

http://msdn.microsoft.com/en-us/library/system.net.webclient(VS.80).aspx

আপনার ক্ষেত্রে, আপনি আপলোডডেটা () পদ্ধতিটি চান। (আবারও একটি কোডের নমুনা ডকুমেন্টেশনে অন্তর্ভুক্ত করা হয়েছে)

http://msdn.microsoft.com/en-us/library/tdbbwh0a(VS.80).aspx

আপলোডস্ট্রিং সম্ভবত এটির মতো কাজ করবে এবং এটি এটিকে আরও একটি স্তর থেকে দূরে ফেলে।

http://msdn.microsoft.com/en-us/library/system.net.webclient.uploadstring(VS.80).aspx


+1 আমার সন্দেহ হয় ফ্রেমওয়ার্কে এটি করার অনেকগুলি উপায় রয়েছে।
জবল

7

আমি জানি এটি একটি পুরানো থ্রেড, তবে আশা করি এটি কোনওটিতে সহায়তা করে।

public static void SetRequest(string mXml)
{
    HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.CreateHttp("http://dork.com/service");
    webRequest.Method = "POST";
    webRequest.Headers["SOURCE"] = "WinApp";

    // Decide your encoding here

    //webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.ContentType = "text/xml; charset=utf-8";

    // You should setContentLength
    byte[] content = System.Text.Encoding.UTF8.GetBytes(mXml);
    webRequest.ContentLength = content.Length;

    var reqStream = await webRequest.GetRequestStreamAsync();
    reqStream.Write(content, 0, content.Length);

    var res = await httpRequest(webRequest);
}

HttpRequest কি? এটি আমাকে একটি ত্রুটি দেয় "বিদ্যমান নেই"।
রাহুল খানদেলওয়াল

6

দেওয়া অন্যান্য উত্তরগুলি কয়েক বছরের পুরানো, বর্তমানে এখানে আমার চিন্তাভাবনাগুলি সহায়ক হতে পারে:

সহজ উপায়

private async Task<string> PostAsync(Uri uri, HttpContent dataOut)
{
    var client = new HttpClient();
    var response = await client.PostAsync(uri, dataOut);
    return await response.Content.ReadAsStringAsync();
    // For non strings you can use other Content.ReadAs...() method variations
}

আরও ব্যবহারিক উদাহরণ

প্রায়শই আমরা জ্ঞাত প্রকার এবং জেএসওএন নিয়ে কাজ করি, সুতরাং আপনি আরও কয়েকটি বাস্তবায়নের সাথে এই ধারণাটি প্রসারিত করতে পারেন, যেমন:

public async Task<T> PostJsonAsync<T>(Uri uri, object dtoOut)
{
    var content = new StringContent(JsonConvert.SerializeObject(dtoOut));
    content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

    var results = await PostAsync(uri, content); // from previous block of code

    return JsonConvert.DeserializeObject<T>(results); // using Newtonsoft.Json
}

এটি কীভাবে বলা যেতে পারে তার একটি উদাহরণ:

var dataToSendOutToApi = new MyDtoOut();
var uri = new Uri("https://example.com");
var dataFromApi = await PostJsonAsync<MyDtoIn>(uri, dataToSendOutToApi);

5

আপনি এই সিউডো কোডের মতো কিছু ব্যবহার করতে পারেন:

request = System.Net.HttpWebRequest.Create(your url)
request.Method = WebRequestMethods.Http.Post

writer = New System.IO.StreamWriter(request.GetRequestStream())
writer.Write("your data")
writer.Close()

response = request.GetResponse()
reader = New System.IO.StreamReader(response.GetResponseStream())
responseText = reader.ReadToEnd
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.