1

webrequestメソッドを使用してファイルを読み込もうとしています。最初にログインしてから、ファイルまたはディレクトリリストを取得する必要があります。https:///xxx.yyy.zzz/login_template

FirefoxのWebサイトのソースを見ると、

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

だから、私はこのコードを書きました:

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

私が得た応答はOKです-それで私は正常にログインしたようです。しかし、それから私はファイルhttps:///xxx.yyy.zzz/myfile.zipを取得するために別のURLに行く必要があります

 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)
    {    
       ...
    }
 }

常に例外が発生しますSystem.Exception:System.Net.WebException:リモートサーバーがエラーを返しました:(501)実装されていません。System.Net.HttpWebRequest.GetResponse()で

私はこのエラーについて見つけることができるすべてを読みました-そして問題は私が得る方法にあるはずです-それがサーバー上で適切に処理されていないという要求に何かがあります-しかし私は何がわかりません間違っている。

4

2 に答える 2

1

「実装されていない」とは、GETリクエストにContentTypeを指定しているためです。サーバーにとっては何の意味もありません(主にPOSTリクエスト中に使用され、XMLなどのペイロードを送信する必要があります)。正しいコンテンツタイプの応答をチェックして、zipファイルを取得していることを確認する必要がありますが、要求を行うには、そのContentType指定を削除する必要があります。

これもMisterZimbuがコメントで指摘していることだと思います。:)

于 2011-01-20T22:10:50.560 に答える
0

問題はpostDataにありました。どうやら、リモートサーバーは "user =" + userName + "&Password ="+pass;を好まなかったようです。sting-まさにこのsting"user= ID&Password=Pass"を期待していました。それは意味がありませんが、それは私が言われたことであり、それは機能します。ご提案ありがとうございます。ジェニー

于 2011-01-29T16:27:55.247 に答える