C# https de connexion et de téléchargement de fichier

J'ai réussi connecté à la page de connexion, cependant, je ne suis pas sûr de savoir comment vous connecter et saisir le fichier c'est derrière la connexion. Ci-dessous le code que j'utilise pour faire la connexion.

  private static bool bypassAllCertificateStuff(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
return true;
}
public static void Processing()
{
string url = "https://app/templat";
HttpWebRequest request;
HttpWebResponse response;
CookieContainer cookies;
ServicePointManager.ServerCertificateValidationCallback =
System.Net.ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
System.Net.ServicePointManager.ServerCertificateValidationCallback
= ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(bypassAllCertificateStuff);
try
{
request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = new CookieContainer();
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
cookies = request.CookieContainer;
request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
String postData = "j_login=user&j_password=user&submit=Send";
byte[] data = System.Text.ASCIIEncoding.ASCII.GetBytes(postData);
request.ContentLength = data.Length;
//Stream stream = request.GetRequestStream();
//stream.Write(data, 0, data.Length);
request.CookieContainer = cookies;
//stream.Close();
StreamReader sr = new StreamReader(response.GetResponseStream());
string tmp = sr.ReadToEnd().Trim();
//response = (HttpWebResponse)request.GetResponse();
//WebClient wbClient = new WebClient();
//wbClient.DownloadFile("https://app/template/simple%2Screen.vm", @"C:\test.xls");
response.Close();
}
else
{
Console.WriteLine("Client was unable to connect!");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}

Je suis positif que le téléchargement ne fonctionne pas et je suis sûr que String postData ne pas effectuer ce que l'intention de s'.

Ci-dessous est le code pour la connexion au site internet

<pre>
<form name=\"loginform\" method=\"post\" action=\"j_security_check\" onSubmit=\"javascript:fixFields();\">
<br>
<table border=\"0\" cellpadding=\"5\" cellspacing=\"0\" width=\"80%\">
<tr>
<td colspan=\"2\" align=\"center\" nowrap=\"nowrap\">
<div id=\"bannerDiv\" class=\"groupingBorder\" style=\"visibility:hidden;position:relative;background-color:#FFFFFF; overflow:auto;\">
</div>
</td>
</tr>
<tr>
<td class=\"contentrtanbld\" nowrap width=\"50%\">Name:</td>
<td class=\"contentltan\" nowrap width=\"50%\">
<input type=\"text\" name=\"j_username\" id=\"j_username\" value=\"\" class=\"authGroupWidth\" size=\"20\"></td>
</tr>
<tr>
<td class=\"contentrtanbld\" nowrap>Password:</td>
<td class=\"contentltan\" nowrap>
<input type=\"password\" name=\"j_password\" id=\"j_password\" value=\"\" class=\"authGroupWidth\" size=\"20\"></td>
</tr>
<tr>
</pre>

Et le fichier à télécharger est via ce lien
https://app/template/simple%2Screen.vm

Je suis en mesure d'établir la connexion à la page web, mais je n'en suis pas sûr comment vous connecter et télécharger le fichier.

Veuillez voir la mise à jour du code. Ce n'est pas encore connecter, et je ne sais pas pourquoi.

 string url = "https://mgr/app";
HttpWebRequest request;
HttpWebResponse response;
CookieContainer cookies = new CookieContainer();
ServicePointManager.ServerCertificateValidationCallback =
System.Net.ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
System.Net.ServicePointManager.ServerCertificateValidationCallback
= ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(bypassAllCertificateStuff);
try
{
string cookieHeader;
string formParams = string.Format("j_login={0}&j_password={1}", "user", "user");
request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
request.ContentLength = bytes.Length;
using (Stream os = request.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = request.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
string pageSource;
string BehinPath = "https://mgr/app/action/store.VivolAction/eventsubmit_dopreparevivollist/ignored";
WebRequest getRequest = WebRequest.Create(BehinPath);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}

C'est le nouveau code, il y a 1 cookie, cependant lorsque j'essaie de le premier post, il ne se connecte jamais.

OriginalL'auteur | 2012-03-23