سؤال

وفشل التعليمة البرمجية التالية مع 400 طلب غير صحيح استثناء. اتصال شبكة بلدي جيد ويمكنني أن أذهب إلى الموقع ولكن لا أستطيع الحصول على هذا اوري مع HttpWebRequest.

private void button3_Click(object sender, EventArgs e)
{
    WebRequest req = HttpWebRequest.Create(@"http://www.youtube.com/");
    try
    {
        //returns a 400 bad request... Any ideas???
        WebResponse response = req.GetResponse();
    }
    catch (WebException ex)
    {
        Log(ex.Message);                
    }
}
هل كانت مفيدة؟

المحلول

أولا، يلقي WebRequest إلى HttpWebRequest مثل هذا:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://www.youtube.com/");

وبعد ذلك، إضافة هذا السطر من التعليمات البرمجية:

req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

نصائح أخرى

وتعيين على وكيل المستخدم و <قوية> التحويلية في صفحة HttpWebRequest : ل

var request = (HttpWebRequest)WebRequest.Create(@"http://www.youtube.com/");
request.Referer = "http://www.youtube.com/"; // optional
request.UserAgent =
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; " +
    "Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; " +
    ".NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; " +
    "InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)";
try
{
    var response = (HttpWebResponse)request.GetResponse();
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        var html = reader.ReadToEnd();
    }
}
catch (WebException ex)
{
    Log(ex);
}

ويمكن أن تكون هناك أسباب كثيرة لهذه المشكلة. هل لديك أي مزيد من التفاصيل حول WebException؟

وأحد الأسباب التي لقد واجهت من قبل، هو أن لديك سلسلة عامل المستخدم سيئة. بعض المواقع (جوجل على سبيل المثال) الاختيار أن طلبات تأتي من وكلاء المستخدم المعروفة لمنع السير الآلي من ضرب صفحاتها.

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

وربما كنت قد حصلت على الملقم الوكيل على التوالي، وليس لديك تعيين الخاصية الوكيل من HttpWebRequest؟

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