WebRequest get jette une exception « Le serveur distant a renvoyé une erreur: (501) Non implémenté. »

StackOverflow https://stackoverflow.com/questions/4751567

Question

Je suis en train de charger un fichier en utilisant la méthode WebRequest. Je dois d'abord vous connecter, obtenir un fichier ou une liste de répertoires. https: ///xxx.yyy.zzz/login_template

Quand je regarde la source d'un site Web dans Firefox, je vois

  <META http-equiv="Content-Type" content="text/html">
  ....
  <form method="post" action="/template/login" enctype="application/x-www-form- urlencoded">
  ....
  <input name="user" type="text">
  <input name="password" type="password">
  <input type=hidden name="switch" value="Log In">
  <input type="submit" value="Accept">

Alors, je l'ai écrit ce code:

  public static string DownloadFile()
  {
     CookieContainer cookieJar = new CookieContainer();
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https:///xxx.yyy.zzz/login_template");
     request.CookieContainer = cookieJar;

     // Set the credentials.
     request.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
     request.Credentials = new NetworkCredential(userName, pass);
     request.KeepAlive = true;
     request.UserAgent = "SecureTransport";
     request.ContentType = @"application/x-www-form-urlencoded";
     request.Method = WebRequestMethods.Http.Post;

     bool loggedin = false;
     try
     {
         // first need to log in
         string postData = "user=" + userName + "&Password=" + pass;
         byte[] postBuffer = System.Text.Encoding.GetEncoding(1252).GetBytes(postData);
         request.ContentLength = postBuffer.Length;
         Stream newStream = request.GetRequestStream();
         // Send the data.
         newStream.Write(postBuffer, 0, postBuffer.Length);
         newStream.Close();

         using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
         {
             // Get the stream containing content returned by the server.
              if (response.StatusCode == HttpStatusCode.OK)
              {
                  loggedin = true;
              }
              response.Close();
          }

La réponse que je reçois est OK - il semble donc que je me suis connecté avec succès. Mais alors, je dois aller à une autre URL pour obtenir un fichier https: ///xxx.yyy.zzz /myfile.zip

 HttpWebRequest requestToGetFile = (HttpWebRequest)WebRequest.Create("https:///xxx.yyy.zzz/myfile.zip");
 requestToGetFile.Method = WebRequestMethods.Http.Get;
 requestToGetFile.CookieContainer = cookieJar;

 requestToGetFile.UserAgent = "SecureTransport";
 requestToGetFile.ContentType = @"application/octet-stream";
 using (HttpWebResponse responseToGetFile = (HttpWebResponse)requestToGetFile.GetResponse())
 {
    if (responseToGetDir.StatusCode != HttpStatusCode.OK)
    {    
       ...
    }
 }

je reçois toujours un System.Exception d'exception: System.Net.WebException: Le serveur distant a renvoyé une erreur: (501) Non implémenté. à System.Net.HttpWebRequest.GetResponse ()

J'ai lu tout ce que je pouvais trouver sur cette erreur - et il semble que le problème devrait être dans la façon dont je reçois - il y a quelque chose dans la demande que ce n'est pas traitée correctement sur le serveur - mais je n » t voir ce qui est faux.

Était-ce utile?

La solution 2

Le problème était postData. Apparemment, le serveur distant n'a pas comme « user = » + nomdutilisateur + « et mot de passe = » + passer; piquent - il attendait exactement ce aiguillon « user = ID et mot de passe = Pass ». Ce qui n'a pas de sens, mais c'est ce qu'on m'a dit et il fonctionne. Je vous remercie pour vos suggestions corps. Jenny

Autres conseils

Le « non implémenté » est parce que vous spécifiez un ContentType à une requête GET. Il ne veut pas dire quoi que ce soit au serveur (Il est principalement utilisé au cours d'une requête POST et que vous souhaitez présenter une charge utile tel que XML). Vous devez vérifier la réponse du type de contenu approprié pour vous assurer que vous obtenez un fichier zip, mais pour faire la demande, vous devez supprimer cette spécification ContentType.

Je pense que c'est ce que MisterZimbu pointe dans le commentaire aussi. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top