各位大侠,我在VB编写的.exe执行程序中,可以通过msxml.XMLhttp对象访问已知站点并获取站点的返回结果,但在C#的Windows应用程序(是窗口应用程序)中,请问怎样做才能去访问已知站点并获取站点的返回结果?
我刚学习.net,请各位大侠多多指点

解决方案 »

  1.   

    我是一个窗口的windows应用程序,不是页面访问的那种管理软件
      

  2.   

    System.Net.WebRequest wrq = System.Net.WebRequest.Create("http://localhost");
    System.Net.WebResponse wrp = wrq.GetResponse();
    // ...........
      

  3.   

    小白,你好,怎么没有指定使用什么方式访问呢?应该指定Get或Post吧?
      

  4.   

    很久以前寫的一個發送資料包並取得服務反饋資訊類,你可以參考一下 public   class   Postdate 

    private   string   sPostDate; 
    ///   <summary> 
    ///   枑蝠杅擂 
    ///   </summary> 
    public   string   PostDate_String 

    get 

    return   sPostDate; 

    set 

    sPostDate=value; 


    private   string   sPostUrl; 
    ///   <summary> 
    ///   枑蝠華硊 
    ///   </summary> 
    public   string   postUrl 

    get 

    return   sPostUrl; 

    set 

    sPostUrl=value; 


    private   CookieContainer   sSessionId; 
    ///   <summary> 
    ///   Cookies梓祩 
    ///   </summary> 
    public   CookieContainer   SessionId 

    get 

    return   sSessionId; 

    set 

    sSessionId=value; 


    private   string   sReturnString; 
    ///   <summary> 
    ///   殿隙趼睫揹 
    ///   </summary> 
    ///   <returns> </returns> 
    public   string   ReturnString 

    get 

    return   sReturnString; 

    set 

    sReturnString=value; 

    } public   void   Send() 

    //ASCIIEncoding   encoding=new   ASCIIEncoding(); 
    //try 
    //{ 
    UTF8Encoding   encoding=new   UTF8Encoding(); 
    byte[]     byte1=encoding.GetBytes(sPostDate); 
    HttpWebRequest   request   =   (HttpWebRequest)   WebRequest.Create(sPostUrl); 
    request.CookieContainer=sSessionId; 
    //request.AllowAutoRedirect=true; 
    request.Method="POST"; 
    request.Accept="*.*"; 
    /*if   (sProxy!="" ¦ ¦sProxy.Length!=0) 

    string[]   aProxy; 
    aProxy=sProxy.Split(':'); 
    WebProxy   p=new   WebProxy(aProxy[0],Convert.ToInt32(aProxy[1])); 
    request.Proxy=p; 
    }*/ 
    /*WebProxy   p=new   WebProxy("12.108.52.196",3128); 
    request.Proxy=p;*/ 
    request.Referer="來路地址"; 
    request.ContentLength=sPostDate.Length; 
    request.ContentType="application/x-www-form-urlencoded"; 
    request.ServicePoint.Expect100Continue   =   false; 
    Stream   newStream=request.GetRequestStream(); 
    newStream.Write(byte1,0,byte1.Length); 
    //request.get 
    request.Timeout=30000; 
    HttpWebResponse   response   =   (HttpWebResponse)   request.GetResponse();   
    byte[]   buf   =   new   byte[46000];   
    string   xx=response.StatusCode   +   "//"   +   response.StatusDescription; 
    Stream   resStream   =   response.GetResponseStream();   
    //resStream.Write(byte1,0,byte1.Length); 
    int   count   =   resStream.Read(buf,   0,   buf.Length);   
    sReturnString=Encoding.Default.GetString(buf,0,count);   
    resStream.Close();   
    newStream.Close(); 
    //} 
    //catch(Exception   ex) 
    //{ 
    // MessageBox.Show(null,ex.Message,"渣昫"); 
    //} 

    }
      

  5.   

    System.Net.WebRequest   wrq   =   System.Net.WebRequest.Create("http://localhost");
    System.Net.WebResponse   wrp   =   wrq.GetResponse();
    //   ...........
      

  6.   

    1:使用webBrowser控件 
        webBrowser1.Navigate("www.csdn.net")
    2: 使用WebRequest
        dim request as WebRequest = WebRequest.Create("url")
        dim response as WebResponse = request.GetResponse()
        dim resStream as Stream = response.GetResponseStream()
        dim sr as StreamReader = new StreamReader(resStream, System.Text.Encoding.Default)
        textBox2.Text = sr.ReadToEnd()
        resStream.Close()
        sr.Close()
      

  7.   

    如果要是用详细设定,可以使用HttpWebRequest
    System.Net.HttpWebRequest hwrq = System.Net.HttpWebRequest.Create("http://localhost") as System.Net.HttpWebRequest;
    hwrq.Method = "POST";
    hwrq.Headers.Add("HEADER_COLLECTION");
    System.Net.WebResponse wrp = hwrq.GetResponse();
    // ...
      

  8.   

    还是没办法,汉字无法转换到URLEncoding
      

  9.   

    string url = System.Web.HttpUtility.UrlEncode("http://www.micorosoft.com/你好.htm");
      

  10.   

    记得要添加 system.web 引用
      

  11.   

    小白,不行啊,System.Web.HttpUtility不通过,哦,我的是Windows平台的应用程序.
      

  12.   

    不是说了要添加 System.Web 引用了吗?在 Solution Explorer,选中你的project,鼠标右键,选 Add Reference,在弹出dialog,在.Net标签页选中 System.web 一行后点确定.
      

  13.   

    // 获取网页的HTML内容
    static string GetPage(string url)
    {
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
      try
      {
        using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
        {
          using (StreamReader sr = new StreamReader(res.GetResponseStream()))
          {
            return sr.ReadToEnd();
          }
        }
      }
      catch (System.Exception e)
      {
        return e.Message;
      }
      finally
      {
        req.Abort();
      }
    }
      

  14.   

    哦,不熟,我以为用了using就行了,还要添加引用,谢谢,今天下午结贴
      

  15.   

    还是不行:
    比如"中国武汉",标准的URLEncode的值为:%D6%D0%B9%FA%CE%E4%BA%BA,而在C#中得到的却是:"%e4%b8%ad%e5%9b%bd%e6%ad%a6%e6%b1%89",完全不一样
      

  16.   

    HttpWebRequest ,HttpWebResponse 已经解决访问问题了吧,
    编码问题要这样System.Web.HttpUtility.UrlEncode( "http://www.micorosoft.com/中国武汉.htm",System.Text.Encoding.GetEncoding("gbk") );
    这样就是你要的结果,默认的是Unicode的。所以得出你后面的结果。
      

  17.   

    webbrowser控件
    以下是参考msdn的:
    1.WebBrowser 控件维护浏览会话期间访问的所有网页的历史记录列表。设置 Url 属性时,WebBrowser 控件导航到指定的 URL 并将该 URL 添加到历史记录列表的末尾。
    2.WebBrowser 控件在本地硬盘的缓存中存储最近访问过的站点的网页。
    不知道对你有帮助没。
      

  18.   

    好了,暂时能够访问了.把我的不成熟的解决方法贴出来,这个方法支持XML协议格式.
    谢谢各位,马上结贴
            private string SendQuery(string szURL,string szQuery)
            {
                string szSend,szReturnString;
                byte[] arybPost,arrbResult;
                int lResultLen;
                UTF8Encoding oEncode;
                System.IO.Stream oSendStream, oResStream;
                szSend = URLEncoding(szQuery); //System.Web.HttpUtility.UrlEncode(szQuery,System.Text.Encoding.GetEncoding("gbk"));
                oEncode = new UTF8Encoding();
                arybPost = oEncode.GetBytes(szSend);
                System.Net.HttpWebRequest oRequest = (System.Net.HttpWebRequest)(System.Net.WebRequest.Create(szURL));
                oRequest.Method = "POST";
                oRequest.Accept = "*.*";
                oRequest.ContentType = "application/x-www-form-urlencoded";
                oRequest.ContentLength = arybPost.Length;
                oSendStream = oRequest.GetRequestStream();
                oSendStream.Write(arybPost, 0, arybPost.Length);
                oSendStream.WriteTimeout = 60;
                oSendStream.ReadTimeout = 60;
                oRequest.Timeout = 60;
                System.Net.HttpWebResponse oResponse = (System.Net.HttpWebResponse)oRequest.GetResponse();
                arrbResult = new byte[204800];
                if (!oResponse.StatusCode.ToString().Equals("OK"))
                {
                    return  "<?xmlversion=\"1.0\"encoding=\"GB2312\"?><HZKJversion=\"1.0\"type=\"Response\"><Public><ErrorMsg><Error><Type>F</Type><Number></number><Source>访问站点</Source><description>"+oResponse.StatusCode.ToString()+"//"+oResponse.StatusDescription+"</description></Error></ErrorMsg></Public><Service></Service><DeriveService></DeriveService></HZKJ>";
                }
                oResStream = oResponse.GetResponseStream();
                lResultLen = oResStream.Read(arrbResult, 0, arrbResult.Length);
                szReturnString = Encoding.Default.GetString(arrbResult, 0, lResultLen);
                oResStream.Close();
                oSendStream.Close();
                return szReturnString; 
            }
            private string URLEncoding(string szQuery)
            {  
                long lngLoop,lngLen;
                string szReturn="";
                Encoding oEncodeDef = Encoding.Default;
                byte[] arrbSend = oEncodeDef.GetBytes(szQuery);
                lngLen = arrbSend.Length;  
                for (lngLoop=0;lngLoop<lngLen;lngLoop++)
                {
                    if (arrbSend[lngLoop] < 128)
                    {
                        szReturn = szReturn + Convert.ToChar(arrbSend[lngLoop]);  
                    }
                    else
                    {
                        szReturn = szReturn+"%" + Convert.ToString(Convert.ToInt16(arrbSend[lngLoop]), 16);
                        lngLoop++;
                        szReturn = szReturn+"%" + Convert.ToString(Convert.ToInt16(arrbSend[lngLoop]), 16);
                    }
                }
                return szReturn;
            }