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
Vous devez vous connecter pour publier un commentaire.
Votre code a la suite de problèmes que je peux voir:
Essayez le code suivant:
Viens de faire une autre demande pour la prochaine url que vous souhaitez visiter et continuer à utiliser le même cookie contenant
request.CookieContainer = cookieJar;
. Si vous n'êtes pas de la soumission des données au serveur assurez-vous que votre méthode de requête GET. Vous devez continuer à utiliser le même cookie contenant pour tout autre web demandes constituent une seule et même session.OriginalL'auteur JamieSee
Poing chose, vous devez lancer le cookie contenant avant de la première demande:
alors vous avez besoin pour passer à chaque requête(maintenant, vous êtes juste de l'instanciation de nouveau, perdant ainsi tous les cookies):
la réponse que vous obtenez à remplir le cookie contenant les cookies nécessaires.
En outre, comme je vois que vous avez déjà, vous devez effectuer une série de Requête/Réponse sur le site et de suivre les cookies. Utiliser un outil comme Fiddler de voir exactement ce que la façon dont vous devez formuler votre POST chaînes de correctement se connecter sur le site.
pouvez-vous de débogage et de voir si elle remplit effectivement dans les cookies, il me semble qu'en faisant cela, vous pourriez être de les écraser.
si tout cela vous semble bon, ensuite, dans la deuxième demande de lire la réponse, et les cookies(ce qui voudrait dire que vous êtes connecté) et ensuite effectuer un autre à télécharger le fichier.
Je pense que c'est la question, jamais il ne tente de se connecter, quand j'ai lu le RP.de bout il est de la page de connexion.
il y a 1 biscuit
OriginalL'auteur TheBoyan