هل WebRequest هي أداة C# المناسبة للتفاعل مع مواقع الويب؟

StackOverflow https://stackoverflow.com/questions/91275

  •  01-07-2019
  •  | 
  •  

سؤال

أنا أكتب أداة صغيرة بلغة C# والتي ستحتاج إلى إرسال واستقبال البيانات من/إلى موقع ويب باستخدام تنسيق POST وjson.لم أفعل شيئًا كهذا من قبل في لغة C# (أو أي لغة حقًا) لذا أجد صعوبة في العثور على بعض المعلومات المفيدة للبدء.

لقد عثرت على بعض المعلومات حول فئة WebRequest في لغة C# (تحديدًا من هنا) ولكن قبل أن أبدأ في الغوص في الأمر، تساءلت عما إذا كانت هذه هي الأداة المناسبة لهذه المهمة.

لقد وجدت الكثير من الأدوات لتحويل البيانات إلى تنسيق json ولكن ليس أكثر من ذلك، لذا فإن أي معلومات ستكون مفيدة حقًا هنا في حالة وصولي إلى طريق مسدود.

هل كانت مفيدة؟

المحلول

تعد WebRequest وبشكل أكثر تحديدًا فئة HttpWebRequest نقطة انطلاق جيدة لما تريد تحقيقه.لإنشاء الطلب، ستستخدم WebRequest.Create وتقوم بإرسال الطلب الذي تم إنشاؤه إلى HttpWebRequest لاستخدامه فعليًا.ستقوم بعد ذلك بإنشاء بيانات منشورك وإرسالها إلى ساحة المشاركات مثل:

HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "var=value1&var2=value2";
req.ContentLength = postData.Length;

StreamWriter stOut = new
StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(postData);
stOut.Close();

وبالمثل، يمكنك قراءة الرد مرة أخرى باستخدام طريقة GetResponse التي ستسمح لك بقراءة تدفق الاستجابة الناتج والقيام بأي شيء آخر تحتاج إلى القيام به.يمكنك العثور على مزيد من المعلومات حول الفصل على:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

نصائح أخرى

العميل على شبكة الإنترنت في بعض الأحيان أسهل في الاستخدام من طلب الويب.قد ترغب في إلقاء نظرة على ذلك.

لإلغاء تسلسل JSON، ستحتاج إلى إلقاء نظرة على ملف JavaScriptSerializer فصل.

مثال عميل الويب:

using (WebClient client = new WebClient ())
{
    //manipulate request headers (optional)
    client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

    //execute request and read response as string to console
    using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))
    {
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
    }
}

تم وضع علامة wiki في حالة رغبة شخص ما في تحديث الكود

عندما يتعلق الأمر بنشر البيانات إلى موقع ويب، System.Net.HttpWebRequest (تطبيق WebRequest الخاص بـ HTTP) هو حل لائق تمامًا.وهو يدعم SSL وطلبات غير متزامنة ومجموعة من الأشياء الجيدة الأخرى، وهو موثق جيدًا على MSDN.

يمكن أن تكون الحمولة أي شيء:البيانات بتنسيق JSON أو أي شيء آخر - طالما قمت بتعيين خاصية ContentType على شيء يتوقعه الخادم ويفهمه (على الأرجح application/json أو text/json أو text/x-json)، سيكون كل شيء على ما يرام.

إحدى المشكلات المحتملة عند استخدام HttpWebRequest من خدمة النظام:نظرًا لأنه يستخدم وكيل IE ومعلومات الاعتماد، فقد يكون السلوك الافتراضي غريبًا بعض الشيء عند التشغيل كمستخدم LOCALSYSTEM (أو بشكل أساسي أي حساب لا يقوم بتسجيل الدخول بشكل تفاعلي على أساس منتظم).ضبط خصائص الوكيل والمصادقة على Nothing (أو كما يفضل أهل لغة C# تسميتها، null, أعتقد) يجب تجنب ذلك.

لقد استخدمت WebRequest للتفاعل مع مواقع الويب.إنها "الأداة" الصحيحة

لا يمكنني التعليق على جانب JSON من سؤالك.

تعتبر الإجابة الأعلى تقييمًا حاليًا مفيدة، ولكنها لا ترسل أو تستقبل JSON.

فيما يلي مثال يستخدم JSON للإرسال والاستقبال:

كيفية نشر كائن json في خدمة الويب

وهنا سؤال StackOverflow الذي ساعدني كثيرًا في حل هذه المشكلة:

مشاكل في إرسال واستقبال JSON بين خدمة الويب ASP.net وعميل الويب ASP.Net

وهنا سؤال آخر ذو صلة:

استدعاء json مع C#

للتحويل من كائن مثيل إلى سلسلة بتنسيق json والعكس، جرب Json.NET:http://json.codeplex.com/

أستخدمه حاليًا في أحد المشاريع وهو سهل التعلم والعمل به ويوفر بعض المرونة فيما يتعلق بالتسلسل ومحولات النوع المخصص.كما أنه يدعم بناء جملة LINQ للاستعلام عن إدخال json.

في الإصدار 3.5 يوجد برنامج jsonserializer مدمج.طلب الويب هو الصف المناسب الذي تبحث عنه.

بعض الأمثلة:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top