WebRequest get produce una excepción “El servidor remoto devolvió un error: (501) no se han aplicado.”

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

Pregunta

Estoy intentando cargar un archivo usando el método WebRequest. Primero necesito que entrar a continuación, obtener un archivo o una lista de directorios. https: ///xxx.yyy.zzz/login_template

Cuando miro a la fuente de página web en Firefox, veo

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

Así que escribió este código:

  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 respuesta que consigo está bien - lo que parece que he iniciado sesión correctamente. Pero entonces, tengo que ir a otra URL para obtener un archivo 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)
    {    
       ...
    }
 }

Siempre obtener una System.Exception excepción: System.NET.WebException: El servidor remoto devolvió un error: (501) no se han aplicado. en System.Net.HttpWebRequest.GetResponse ()

He leído todo lo que pude encontrar sobre este error - y parece que el problema debe estar en la forma en que hago llegar - hay algo en la solicitud que no está siendo manejado correctamente en el servidor - pero don' t ver lo que está mal.

¿Fue útil?

Solución 2

El problema estaba en Postdatum. Al parecer, el servidor remoto no le gustó "user =" + nomUsuario + "y contraseña =" + pasar; picar - se espera exactamente este aguijón "user = ID y contraseña = Pass". Lo cual no tiene sentido, pero eso es lo que me dijeron y funciona. Muchas gracias por sus sugerencias cuerpo. Jenny

Otros consejos

El "no se han aplicado" se debe a que está especificando un ContentType a una petición GET. Esto no significa nada para el servidor (que se utiliza sobre todo durante una solicitud POST y desea enviar una carga útil como XML). Es necesario comprobar la respuesta para el tipo de contenido correcto para asegurarse de que está recibiendo un archivo zip pero para hacer la solicitud, usted tiene que quitar esa especificación ContentType.

creo que esto es lo que MisterZimbu está señalando en el comentario también. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top