最近用C#写代码,遇见一个奇怪的问题。用WebRequest对象访问一个Url地址,被报400错误。但是同样的Url在浏览器(如IE)中访问时并没有报错,很正常。把握郁闷坏啦。有碰到这类问题的朋友吗?指点一下。代码如下:
        static void Main(string[] args)
        {
            Console.WriteLine("测试\n=============================");            string url = @"http://bbs.360safe.com/forumdisplay.php?fid=22&page=1";            try
            {
                WebRequest request = WebRequest.Create(url);
                Console.WriteLine("Method: {0}", request.Method);
                Console.WriteLine("ContentType  : {0}", request.ContentType);
                WebResponse response = request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader sr = new StreamReader(stream, Encoding.Default);
                string html = sr.ReadToEnd();
                response.Close();
                Console.WriteLine("[WebRequest下载:" + html.Length.ToString() + " 字符] ");            }
            catch (WebException e)
            {
                Console.WriteLine("[WebRequest下载出错0:" + e.Message + "] ");
            }
            catch (Exception e)
            {
                Console.WriteLine("[WebRequest下载出错0:" + e.Message + "] ");
            }            Console.ReadLine();
        }

解决方案 »

  1.   

    可能要传cookie用HttpWebRequest 试试
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 
    http://feiyun0112.cnblogs.com/
      

  2.   

    代理问题  string url = @"http://bbs.360safe.com/forumdisplay.php?fid=22&page=1";
                string strhtml = Internet.GetHtml(url);using System;
    using System.Net;
    using System.IO;
    using System.Text;
    using System.Text.RegularExpressions;
    public static class Internet
    {
       private static HttpWebRequest request;
      private static  HttpWebResponse response;
       private static  StreamReader reader;
        private static string strResults;
        private static Encoding encoding;
        static Internet()
        {
            strResults = string.Empty;
        }
        public static string GetHtml(string strLink)
        {
           
            try
            {            request = (HttpWebRequest)WebRequest.Create(strLink);
                switch ((DateTime.Now.Second % 2))
                {
                    case 0:
                        request.UserAgent = "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1;.NET CLR 2.0.50727)";
                        break;                default:
                        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1) Web-Sniffer/1.0.24";
                        break;
                }
                response = (HttpWebResponse)request.GetResponse();
             
                if (response.CharacterSet != null && response.CharacterSet.ToLower() == "utf-8")
                {
                    encoding = Encoding.UTF8;
                }
                else
                {
                    encoding = Encoding.GetEncoding(936);
                }
                reader = new StreamReader(response.GetResponseStream(),encoding);
                strResults = Regex.Replace(reader.ReadToEnd(), @"[\r\n]", " ");
                if (strLink != response.ResponseUri.ToString())
                {
                    strResults = "|RedirectWeb|" + strResults;
                }
                return strResults;
            }
            catch
            {
                return string.Empty;
            }
            finally
            {
                request.Abort();
                if (response != null)
                {
                    response.Close();
                }
                if (reader != null)
                {
                    reader.Close();
                    reader.Dispose();
                }
            }    }
    }
      

  3.   

    问题解决了。根据hackztx方法测试,确实是用户代理问题。多谢!