听说用 WebClient 比较方便,楼主有没有试过。

解决方案 »

  1.   

    之前我也用WebClient.UploadValues()试过也是一样的结果,返回的就是这个页面,没有转到我需要的页面,真是不明白
      

  2.   

    要考虑的是viewstate中的值,aspx很多东西存在viewstate里看看aspx页面在客户段形成的html代码就清楚了
    不止是XXXX.aspx?yyyy=mmm&aaa=bbb这么简单
      

  3.   

    Public Function PostDate(ByVal url As String, ByVal PostData() As String) As String
            Dim Post As String = ""
            For Each s As String In PostData
                Post += s + "&"
            Next
            Post = Post.Substring(0, Post.Length - 1)
            Dim html As String = ""        Dim encoding As Encoding = encoding.GetEncoding("GB2312")
            Dim data As Byte() = encoding.GetBytes(Post)
            Dim myRequest As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
            myRequest.Method = "POST"
            myRequest.ContentType = "application/x-www-form-urlencoded"
            myRequest.ContentLength = data.Length
            Dim newStream As Stream = myRequest.GetRequestStream()
            newStream.Write(data, 0, data.Length)
            newStream.Close()
            Dim resp As HttpWebResponse = CType(myRequest.GetResponse(), HttpWebResponse)
            Dim sr As StreamReader = New StreamReader(resp.GetResponseStream(), System.Text.Encoding.Default)
            html = sr.ReadToEnd()        Return html
        End Function
    使用:
     Dim postdata As String() = {"id=luajiu", "pw=xxxx", "ipmask=0"}        Dim strUrl As String = "http://bbs.cau.edu.cn/wusetu.cn/bbslogin"
            Dim SessionHtml As String = PostDate(strUrl, postdata)
      

  4.   

    <input type="hidden" name="__VIEWSTATE" value="dDwxOTQ2MzIyODYyOzs+dJQqP5Ug1RvHE7UOifXJDX5BxoM=" />
    看到这个没有
      

  5.   

    一直很正常 模拟登陆页面 取得返回html  楼主试试!
      

  6.   

    如果没有跳转到你要的页面!
    你就可以用刚刚那个函数 返回结果 的html  分析一下他跳转的页 ,然后再用下面函数去直接得到改页的html 应该你上面的那一步 就模拟登陆了!所以下面就可以直接来了!
     Public Shared Function GetDate(ByVal strUrl As String) As String
            Dim html As String = ""        Dim resp As HttpWebResponse
            Dim req As HttpWebRequest = CType(HttpWebRequest.Create(strUrl), HttpWebRequest)
            req.Timeout = 25000
            resp = CType(req.GetResponse(), HttpWebResponse)
            Dim sr As StreamReader = New StreamReader(resp.GetResponseStream(), System.Text.Encoding.Default)
            html = sr.ReadToEnd()
            
            Return html
        End Function
      

  7.   

    UploadValues 时,在服务端跟踪一下吧。
      

  8.   

    谢谢大家的回复,
    我的web程序中登陆过程是要修改数据库的,但是我发现数据库一直没有变化,也就是说可能登陆的程序根本没有被执行,还是不明白
      

  9.   

    偶还是第一次听说,,用winform接受来自服务器的 html结果...winClient ?
    这是那种开发模式?? c/s 还是b/s?还是 b/s中的 s 和 c/s中的 C  这样的关系,,,,
    大哥们给解释一下..
      

  10.   

    我的程序有点类似flashget之类,主要是向web程序发送参数,然后获得其返回结果(返回的是一个文件,我的程序将其下载保存到本地),这个可行吗?
      

  11.   

    我已经实现了成功登陆一些bbs,但是我现在的程序是要做一个自动填表的程序,填入的数据我的本地文件中读取,然后发送到网上,得到web程序的响应的是一个pdf文件,即填好的表格加上一些web程序填入的内容,可是我总是没法得到那个pdf文件,哪位大虾教我?
      

  12.   

    绝对可以!我给你的上面的函数 最后把返回的流存为pdf就好了
      

  13.   

    能帮我看看吗? 我要填表的网站是:
    https://evisaforms.state.gov/ds156.asp?lang=1
    程序如下:
    string userName = UserName.Text;
    string password = Password.Text;
    string url = "https://evisaforms.state.gov/ds156_complete.asp?pdf=DS156_Complete.pdf"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.AllowAutoRedirect = true;
    request.ContentType="application/x-www-form-urlencoded"; string str =parameters[0];
    int i = 1;
    while(i < parameters.Length)
    {
    str+="&" + parameters[i];
    i++;
    }

    byte[] data = System.Text.Encoding.Default.GetBytes(str);
    request.ContentLength = data.Length;
    Stream stream = request.GetRequestStream();
    stream.Write(data,0,data.Length);
    stream.Flush();
    stream.Close(); System.Text.Encoding encode = System.Text.Encoding.GetEncoding("gb2312"); HttpWebResponse response = null;
    try
    {
    response = (HttpWebResponse)request.GetResponse();
    }
    catch(WebException ex)
    {
    MessageBox.Show(ex.Message + ex.Source + ex.Status.ToString());
    return;
    }

    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream, encode);
    string result = reader.ReadToEnd();
    responseStream.Close();
    reader.Close();
    string path = ""; Result.Text = result; if(response.ContentType == "text/html")
    {
    path = "c:\\result.htm";

    }
    else if(response.ContentType == "application/pdf")
    path = "c:\\result.pdf";
    else
    path = "c:\\result.dat";
    FileStream fs = new FileStream(path,FileMode.Create);
    data = System.Text.Encoding.Default.GetBytes(result);
    fs.Write(data, 0,data.Length);
    fs.Flush();
      

  14.   

    填表的目标url就是form中的action指向的url,这个设置应该是对的吧,可是返回的response的内容确实填表的向导(insttruction page)要知道,这个网站即时表格不填入任何内容应该也是可以得到pdf的返回的啊,为什么程序就没法得到呢,是不是有什么隐藏的字段需要发送过去呢?