WebRequest löst eine Ausnahme aus "Der Remote -Server hat einen Fehler zurückgegeben: (501) Nicht implementiert."

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

Frage

Ich versuche, eine Datei mithilfe der WebRequest -Methode zu laden. Zuerst muss ich mich anmelden und dann eine Datei oder eine Verzeichnisliste abrufen. https: ///xxx.yyy.zzz/login_template

Wenn ich mir die Quelle der Website in Firefox ansehe, sehe ich

  <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">

Also habe ich diesen Code geschrieben:

  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();
          }

Die Antwort, die ich bekomme, ist in Ordnung - also scheint es, dass ich erfolgreich eingeloggt habe. Aber dann muss ich zu einer anderen URL gehen, um eine Datei zu erhalten 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)
    {    
       ...
    }
 }

Ich erhalte immer ein Ausnahmesystem.Exception: System.net.WebException: Der Remote -Server hat einen Fehler zurückgegeben: (501) Nicht implementiert. at system.net.httpwebrequest.getResponse ()

Ich habe alles gelesen, was ich über diesen Fehler finden konnte - und es scheint, dass das Problem so sein sollte, wie ich es bekomme - etwas in der Anfrage ist, dass es auf dem Server nicht ordnungsgemäß behandelt wird - aber ich sehe nicht was ist falsch.

War es hilfreich?

Lösung 2

Das Problem war in Postdaten. Anscheinend mochte der Remote -Server "user =" + userername + "& password =" + pass; Sting - Es war genau dieser Sting "user = id & password = pass". Was keinen Sinn macht, aber das wurde mir gesagt und es funktioniert. Vielen Dank an den Körper für Ihre Vorschläge. Jenny

Andere Tipps

Das "Nicht implementierte" liegt daran, dass Sie einen ContentType für eine Get -Anfrage angeben. Es bedeutet nichts für den Server (es wird hauptsächlich während einer Postanforderung verwendet und Sie möchten eine Nutzlast wie XML einreichen). Sie müssen die Antwort auf den richtigen Inhaltstyp überprüfen, um sicherzustellen, dass Sie eine ZIP -Datei erhalten. Um die Anforderung zu stellen, müssen Sie diese ContentType -Spezifikation entfernen.

Ich denke, das ist es, was Misterzimbu auch im Kommentar zeigt. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top