如何验证WebClient请求?

时间:2009-12-10 20:09:52

标签: c# asp.net webclient

我正在使用webclient调用我网站上的某个页面。我正在尝试将网页的结果放入pdf中,因此我尝试获取呈现页面的字符串表示形式。问题是请求未经过身份验证,因此我得到的只是一个登录屏幕。我已将UseDefaultCredentials属性发送到true,但我仍然得到相同的结果。以下是我的代码的一部分:

 WebClient webClient = new WebClient();
 webClient.Encoding = Encoding.UTF8;

 webClient.UseDefaultCredentials = true;
 return Encoding.UTF8.GetString(webClient.UploadValues(link, "POST",form));

4 个答案:

答案 0 :(得分:91)

您需要为WebClient对象提供凭据。像这样......

 WebClient client = new WebClient();
 client.UseDefaultCredentials = true;
 client.Credentials = new NetworkCredential("username", "password");

答案 1 :(得分:3)

您使用的是哪种身份验证?如果是表单身份验证,那么最多只需找到.ASPXAUTH cookie并在WebClient请求中传递它。

最坏的情况是,它不起作用。

答案 2 :(得分:1)

Public Function getWeb(ByRef sURL As String) As String
    Dim myWebClient As New System.Net.WebClient()

    Try
        Dim myCredentialCache As New System.Net.CredentialCache()
        Dim myURI As New Uri(sURL)
        myCredentialCache.Add(myURI, "ntlm", System.Net.CredentialCache.DefaultNetworkCredentials)
        myWebClient.Encoding = System.Text.Encoding.UTF8
        myWebClient.Credentials = myCredentialCache
        Return myWebClient.DownloadString(myURI)
    Catch ex As Exception
        Return "Exception " & ex.ToString()
    End Try
End Function

答案 3 :(得分:0)

这有助于我调用使用cookie身份验证的API。我已经在标题中通过了授权,例如:

request.Headers.Set("Authorization", Utility.Helper.ReadCookie("AuthCookie"));

完整代码:

// utility method to read the cookie value:
        public static string ReadCookie(string cookieName)
        {
            var cookies = HttpContext.Current.Request.Cookies;
            var cookie = cookies.Get(cookieName);
            if (cookie != null)
                return cookie.Value;
            return null;
        }

// using statements where you are creating your webclient
using System.Web.Script.Serialization;
using System.Net;
using System.IO;

// WebClient:

var requestUrl = "<API_url>";
var postRequest = new ClassRoom { name = "kushal seth" };

using (var webClient = new WebClient()) {
      JavaScriptSerializer serializer = new JavaScriptSerializer();
      byte[] requestData = Encoding.ASCII.GetBytes(serializer.Serialize(postRequest));
      HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
      request.Method = "POST";
      request.ContentType = "application/json";                        
      request.ContentLength = requestData.Length;
      request.ContentType = "application/json";
      request.Expect = "application/json";
      request.Headers.Set("Authorization", Utility.Helper.ReadCookie("AuthCookie"));
      request.GetRequestStream().Write(requestData, 0, requestData.Length);

      using (var response = (HttpWebResponse)request.GetResponse()) {
         var reader = new StreamReader(response.GetResponseStream());
         var objText = reader.ReadToEnd(); // objText will have the value
      }
}