title: C# HttpWebRequest to a HTTPS failed
body: <p>I am trying to login to this website <a href="https://www.virginmobile.com.au" rel="nofollow noreferrer">https://www.virginmobile.com.au</a> programatically (on the right there is a Member Login form).</p>
  
  <p>That form works. But when I do a POST request to the form action (<a href="https://www.virginmobile.com.au/selfcare/MyAccount/LogoutLoginPre.jsp" rel="nofollow noreferrer">https://www.virginmobile.com.au/selfcare/MyAccount/LogoutLoginPre.jsp</a>) it failed.</p>
  
  <p>It returns a 302, then following up to the new location, it returns 405.</p>
  
  <p>This is my code test1.aspx.cs</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Net;
  using System.Text;
  using System.IO;
  using System.Security.Cryptography.X509Certificates;
  using System.Net;
  
  
  public partial class test1 : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      string uri = "https://www.virginmobile.com.au/selfcare/MyAccount/LogoutLoginPre.jsp";
      string parameters = "username=0411222333&amp;password=123";
  
      System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
  
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
      req.Method = "POST";
      req.ContentType = "application/x-www-form-urlencoded";
      //req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 ( .NET CLR 3.0.4506.2152)";
      //req.Referer = "http://www.virginmobile.com.au/";
      //req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
      req.AllowAutoRedirect = false;
  
      // Send the Post
      byte[] paramBytes = Encoding.ASCII.GetBytes(parameters);
      req.ContentLength = paramBytes.Length;
      Stream reqStream = req.GetRequestStream();
      reqStream.Write(paramBytes, 0, paramBytes.Length);   //Send it
      reqStream.Close();
  
      // Get the response
      HttpWebResponse response = (HttpWebResponse)req.GetResponse();
      if (response == null) throw new Exception("Response is null");
  
      if (!string.IsNullOrEmpty(response.Headers["Location"]))
      {
        string newLocation = response.Headers["Location"];
  
        // Request the new location
        req = (HttpWebRequest)WebRequest.Create(newLocation);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        //req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 ( .NET CLR 3.0.4506.2152)";
        //req.Referer = "http://www.virginmobile.com.au/";
        //req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        req.AllowAutoRedirect = false;
        req.CookieContainer = new CookieContainer();
        req.CookieContainer.Add(response.Cookies);
  
        // Send the Post
        paramBytes = Encoding.ASCII.GetBytes(parameters);
        req.ContentLength = paramBytes.Length;
        reqStream = req.GetRequestStream();
        reqStream.Write(paramBytes, 0, paramBytes.Length);   //Send it
        reqStream.Close();
  
        // Get the response
        response = (HttpWebResponse)req.GetResponse(); //**** 405 Method Not Allowed here
      }
  
      StreamReader sr = new StreamReader(response.GetResponseStream());
      string responseHtml = sr.ReadToEnd().Trim();
  
      Response.Write(responseHtml);
    }
  }
  
  public class MyPolicy : ICertificatePolicy
  {
    public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
    {
      return true; // Return true to force the certificate to be accepted.
    }
  }
  </code></pre>
  
  <p>Could anyone help me? Thanks in advance!</p>