0

我正在尝试使用它登录到一个站点HTTPWebRequest,它可以工作。问题是即使我传递了错误的凭据,或者是错误的 URL,它也能正常工作。不抛出异常。

我应该怎么做才能在以下代码中出现异常?

try
{
    WebRequest request = WebRequest.Create("http://192.1111.1.1111");
    ViewBag.Message = request.ContentLength;
}
catch (Exception e)
{
    ViewBag.Message = "failed";
}

或者还有其他解决方法吗?

4

5 回答 5

4

您实际上并没有提出请求,只是创建了类。为了发出请求,您需要阅读响应。您还可以通过访问请求流来发起请求。

//Create a new WebRequest Object to the mentioned URL.
WebRequest myWebRequest=WebRequest.Create("http://www.contoso.com");

// This will throw an exception if the request fails
WebResponse myWebResponse=myWebRequest.GetResponse();
于 2013-03-07T13:25:32.200 回答
2

您没有使用此代码执行请求,您必须添加:

try
{
    WebRequest request = WebRequest.Create("http://192.1111.1.1111");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    ViewBag.Message = response.ContentLength;
}
catch (WebException e)
{
    ViewBag.Message = "failed";
}

之后,除此之外,您可以检查状态代码(401 Unauthorized 等)

于 2013-03-07T13:26:39.227 回答
0

您需要实际提出请求,而不仅仅是创建类。

您可以通过以下方式获得响应:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

于 2013-03-07T13:26:54.563 回答
0

您提供的代码示例只是初始化请求对象。您提供给请求的参数被认为是有效的,因此不会引发异常。

当您进行连接尝试时,可能会引发错误。

有关哪些异常以及何时引发的更多信息,请参阅MSDN 文档。WebRequest.Create()

于 2013-03-07T13:27:14.157 回答
0

谢谢大家...我研究了您的答案,是的,它起作用了...我可以使用一些有效凭据登录Facebook...太好了!!!:) 下面是我的最终代码:-

        CookieCollection cookies = new CookieCollection();
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://www.facebook.com");
        request.CookieContainer = new CookieContainer();
        request.CookieContainer.Add(cookies);
        //Get the response from the server and save the cookies from the first request..
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        cookies = response.Cookies;



        string getUrl = "https://www.facebook.com/login.php?login_attempt=1";
        string postData = String.Format("email={0}&pass={1}", "", "");
        HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl);
        getRequest.CookieContainer = new CookieContainer();
        getRequest.CookieContainer.Add(cookies); //recover cookies First request
        getRequest.Method = WebRequestMethods.Http.Post;
        getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
        getRequest.AllowWriteStreamBuffering = true;
        getRequest.ProtocolVersion = HttpVersion.Version11;
        getRequest.AllowAutoRedirect = true;
        getRequest.ContentType = "application/x-www-form-urlencoded";

        byte[] byteArray = Encoding.ASCII.GetBytes(postData);
        getRequest.ContentLength = byteArray.Length;
        Stream newStream = getRequest.GetRequestStream(); //open connection
        newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
        newStream.Close();

        HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
        using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
        {
            string sourceCode = sr.ReadToEnd();
            ViewBag.Message = sourceCode;

        }

当然,除了 httpwebrequest 和 httpwebresponse 之外,代码中还有很多其他的东西......
1)您必须运行两次 httpwebrequest 才能首先获取 cookie 集合,然后使用相同的 cookiecollection 实际登录因为 facebook 在登录前设置了某些 cookie它需要在登录时获取...
2)(这是我之前的问题的答案,即如何检查 URL 是否正常工作)所以你要做的是获取字符串中的页面内容(在本例中为 sourceCode)n 然后只需搜索你认为的特定字符串可能出现在结果页面中......就像在这种情况下,如果我成功登录,我可能会被重定向到 FB 上用户的主页。并且该页面可能包含用户名或页面标题之类的内容是“Facebook”...... n 等等......这样我们如何检查带有或不带凭据的 URL 是否成功......

就是这样......这个简单的事情花了我差不多三天......!荒谬的!

于 2013-03-08T19:20:36.403 回答