HttpWebRequest pass credentials to next HttpWebRequest

前端 未结 3 1436
执笔经年
执笔经年 2020-12-17 06:55

I am logging into a page using HttpWebRequest and getting some information. I then use that information to create a new HttpWebRequest to get some more information. I do not

相关标签:
3条回答
  • 2020-12-17 06:59

    This is a really old question and I know it states no WebClient but I will post here for everyone who comes across this from Google. The original concept is not my code. I do not know where I originally found it.

    using (WebClientEx client = new WebClientEx())
    {
      client.IntTimeout = intTimeout;
      client.DownloadString(strReportUrlPrefix + strReportUrlQuery);
    
      NameValueCollection auth = new NameValueCollection
      {
        { "j_username", strReportUsername},
        { "j_password", strReportPassword}
      };
    
      byte[] data = client.UploadValues(strReportUrlPrefix + "j_security_check", auth);
    
      // LOGIC HERE WITH DATA
    }
    

    WebClientEx Class:

    public class WebClientEx : WebClient
    {
      private CookieContainer _cookieContainer = new CookieContainer();
      public int IntTimeout { get; set; }
    
      protected override WebRequest GetWebRequest(Uri address)
      {
        WebRequest request = base.GetWebRequest(address);
        if (request != null)
          request.Timeout = IntTimeout;
    
        if (request is HttpWebRequest)
          (request as HttpWebRequest).CookieContainer = _cookieContainer;
    
        return request;
      }
    }
    
    0 讨论(0)
  • 2020-12-17 07:02

    Add a CookieContainer to each request before you send it. Add the cookies you get from the first response to the second request. Assuming they use cookies for authentication, this should authenticate the second request.

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlWithParameters);
     request.CookieContainer = new CookieContainer();
    
     HttpWebResponse response = (HttpWebResponse) request.GetResponse();
    
     var cookies = new CookieContainer();
     cookies.Add( response.Cookies );
    
     request = (HttpWebRequest)WebRequest.Create(secondUrlWithParameters);
     request.CookieContainer = cookies;
    
     ...
    
    0 讨论(0)
  • 2020-12-17 07:10

    this is just a sample running code based on answer 2. Maybe be redundant maybe illustrate somebody.

                string url = "http://servername/place-where-data-is.extension"
                string loginUrl = "https://servername/sampleLogin?email=eeeeee&passwd=xxxxxxx";
    
    
                HttpWebRequest loginRequest = (HttpWebRequest)HttpWebRequest.Create(loginUrl);
                loginRequest.CookieContainer = new CookieContainer();
                loginRequest.Method = WebRequestMethods.Http.Get;
                HttpWebResponse loginResponse = (HttpWebResponse)loginRequest.GetResponse();
                var cookies = new CookieContainer();
                cookies.Add(loginResponse.Cookies);
    
    
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                request.CookieContainer = cookies;
                request.Method = WebRequestMethods.Http.Get;
    
                WebResponse response = (WebResponse)request.GetResponse();
    
                Stream responseStream = response.GetResponseStream();
    
    0 讨论(0)
提交回复
热议问题