代码之家  ›  专栏  ›  技术社区  ›  Anirudh Goel

在C中使用Windows应用程序执行HTTP方法#

  •  2
  • Anirudh Goel  · 技术社区  · 15 年前

    有许多站点在表单提交时调用脚本,并使用HTTP POST或GET传入参数,使用Web调试器,我发现了正在传递的参数。现在,我希望通过我的C中的Windows应用程序做同样的事情。如何实现这种功能?

    我目前正在C_中使用httpwebrequest和httpwebresponse类。但这是一个痛苦,因为我必须为我试图加载和工作的每个页面编写明确的代码。例如,我试图将用户名和密码传递到一个PHP页面,并获取响应,该响应将发送一个cookie和一个返回的页面,我根据该页面标识用户是否登录。

    HttpWebRequest loginreq = createreq("http://www.indyarocks.com/mobile/index.php");
                    String logintext = "username=" + TxtUsrname.Text + "&pass=" + TxtPasswd.Password + "&button.x=0&button.y=0";
                    loginreq.ContentLength = logintext.Length;
                    StreamWriter writerequest = new StreamWriter(loginreq.GetRequestStream());
                    writerequest.Write(logintext);
                    writerequest.Close();
                    HttpWebResponse getloginpageresponse = (HttpWebResponse)loginreq.GetResponse();
                    cookie = getloginpageresponse.Cookies[0];
                    BinaryFormatter bf1 = new BinaryFormatter();
                    Stream f1 = new FileStream("E:\\cookie.dat", FileMode.OpenOrCreate);
                    bf1.Serialize(f1, cookie);
                    f1.Close();
    
                    string nexturl = getloginpageresponse.Headers[HttpResponseHeader.Location];
                    StreamReader readresponse = new StreamReader(getloginpageresponse.GetResponseStream());
                    if (nexturl == "p_mprofile.php")
                    {
                        MessageBox.Show("Login Successful");
                        GrpMsg.IsEnabled = true;
                    }
                    else if (nexturl == "index.php?msg=1")
                    {
                        MessageBox.Show("Invalid Credentials Login again");
                    }
    

    这是我的createreq类

     private HttpWebRequest createreq(string url)
            {
                HttpWebRequest temp = (HttpWebRequest)WebRequest.Create(url);
                temp.Method = "POST";
                temp.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022; FDM)";
                temp.KeepAlive = true;
                temp.ContentType = "application/x-www-form-urlencoded";
                temp.CookieContainer = new CookieContainer();
                temp.AllowAutoRedirect = false;
                return temp;
            }
    

    我走对了吗?有更好的方法吗?

    1 回复  |  直到 13 年前
        1
  •  6
  •   womp    15 年前

    你应该使用 System.Net.WebClient.

    您可以使用它对您想要的任何方法和头进行请求,并通过一个简单的流读取获得结果页面。

    在msdn页面上有一个简单的示例,但是使用它的一些示例代码可能如下所示:

    WebClient webclient= new WebClient();
    
    using (StreamReader reader = new StreamReader(webclient.OpenRead("http://www.google.com")))
    {
            string result = reader.ReadToEnd();
             // Parse web page here
    }