mail.ruクラウド用の.Netクライアント

画像



記事のタイトルでは、誰もが議論される内容をすでに推測していると思います。 ご存知のように、mail.ruクラウドの公式APIはまだ存在しないため、自分で作成してみてください。 もちろん、これはクライアント部分に関するものであり、サーバー部分に関するものではありません。



使用されたものとそれを書くために知っておくべきこと:



-C#プログラミング言語

-Visual Studio開発環境

-POSTおよびGETリクエストの基本的な知識

-ブラウザ



実際、これがすべてを支えているのは、APIが一部のブラウザーリクエストをcloud.mail.ruサーバーに繰り返すだけです。 クラウド上のファイルまたはフォルダーを使用して操作を行う場合、ブラウザーはサーバーにhttp要求を送信し、サーバーはそれに応答して必要な答えを提供します。



ファイルまたはフォルダーを削除する要求の最も簡単な例。 Chromeブラウザを使用してリクエストを追跡します。



-削除するファイルまたはフォルダーを選択します

-F12を押します

-[ネットワーク]タブに移動します

-選択したファイルまたはフォルダーで[削除]をクリックします

-[ネットワーク]タブにリクエストが表示され、その中に削除というリクエストが表示されます



リクエストを削除
全般



Request URL:https://cloud.mail.ru/api/v2/file/remove Request Method:POST Status Code:200 OK Remote Address:217.69.139.7:443
      
      





応答ヘッダー



 Cache-Control:no-store, no-cache, must-revalidate Connection:close Content-Length:96 Content-Security-Policy-Report-Only:default-src *.cloud.mail.ru *.cloud.mail.ru *.datacloudmail.ru *.cldmail.ru *.mail.ru *.imgsmail.ru *.files.attachmail.ru *.mradx.net *.gemius.pl *.weborama.fr *.adriver.ru *.serving-sys.com featherservices.aviary.com d42hh4005hpu.cloudfront.net dme0ih8comzn4.cloudfront.net feather-client-files-aviary-prod-us-east-1.s3.amazonaws.com ; script-src 'unsafe-inline' 'unsafe-eval' *.cloud.mail.ru *.datacloudmail.ru *.cldmail.ru *.mail.ru *.imgsmail.ru *.files.attachmail.ru *.mradx.net *.yandex.ru *.odnoklassniki.ru odnoklassniki.ru *.ok.ru ok.ru *.scorecardresearch.com www.google-analytics.com featherservices.aviary.com d42hh4005hpu.cloudfront.net dme0ih8comzn4.cloudfront.net feather-client-files-aviary-prod-us-east-1.s3.amazonaws.com; img-src data: *; style-src 'unsafe-inline' *.mail.ru *.imgsmail.ru *.files.attachmail.ru *.mradx.net featherservices.aviary.com d42hh4005hpu.cloudfront.net dme0ih8comzn4.cloudfront.net feather-client-files-aviary-prod-us-east-1.s3.amazonaws.com; font-src data: cloud.mail.ru *.imgsmail.ru *.files.attachmail.ru *.mradx.net featherservices.aviary.com d42hh4005hpu.cloudfront.net dme0ih8comzn4.cloudfront.net feather-client-files-aviary-prod-us-east-1.s3.amazonaws.com; frame-src *.mail.ru *.datacloudmail.ru *.cldmail.ru docs.mail.ru *.officeapps.live.com *.mradx.net; object-src data: blob: https://*; report-uri https://cspreport.mail.ru/cloud/; Content-Type:application/json; charset=utf-8 Date:Sun, 10 Apr 2016 13:43:38 GMT Expires:Sat, 11 Apr 2015 13:43:38 GMT Pragma:no-cache Server:Tengine Strict-Transport-Security:max-age=15768000; includeSubDomains; preload X-Content-Type-Options:nosniff X-Frame-Options:SAMEORIGIN X-Host:clof8.i.mail.ru X-req-id:OljB4ucgKW X-server:api X-UA-Compatible:IE=Edge X-Upstream-Time:1460295818.308 X-XSS-Protection:1; mode=block; report=https://cspreport.mail.ru/xxssprotection
      
      





リクエストヘッダー



 Accept:*/* Accept-Encoding:gzip, deflate Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Content-Length:181 Content-Type:application/x-www-form-urlencoded; charset=UTF-8 Cookie: ,    Host:cloud.mail.ru Origin:https://cloud.mail.ru Referer:https://cloud.mail.ru/home/ User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 X-Requested-With:XMLHttpRequest
      
      





フォームデータ



 view URL encoded home:/rename folder test (1) api:2 build:hotfix-35-1.201604041616 x-page-id:DcpfqVgGGm email:erastmorgan@bk.ru x-email:erastmorgan@bk.ru token:9qFgR48wHY5Rxqot4Ei515TiQMYCsPxD
      
      







APIから同じリクエストを繰り返す必要があります。 このために、HttpWebRequestクラスとHttpWebResponseクラスを使用します。 ここでは、要求は、上記でコンパイルされたブラウザーとまったく同じように見えるはずですが、一部のヘッダーは必要ありません。 以下のファイルまたはフォルダーを削除するリクエストの例を参照してください。



リクエストCを削除#
このコードをプロジェクトから直接引き出しました。 それは非常に単純であり、コメントが必要だとは思わない。



 /// <summary> /// Remove file or folder. /// </summary> /// <param name="name">File or folder name.</param> /// <param name="fullPath">Full file or folder name.</param> private void Remove(string name, string fullPath) { var removeRequest = Encoding.UTF8.GetBytes(string.Format("home={0}&api={1}&token={2}&email={3}&x-email={3}", fullPath, 2, this.Account.AuthToken, this.Account.LoginName)); var url = new Uri(string.Format("{0}/api/v2/file/remove", ConstSettings.CloudDomain)); var request = (HttpWebRequest)WebRequest.Create(url.OriginalString); request.Proxy = this.Account.Proxy; request.CookieContainer = this.Account.Cookies; request.Method = "POST"; request.ContentLength = removeRequest.LongLength; request.Referer = string.Format("{0}/home{1}", ConstSettings.CloudDomain, fullPath.Substring(0, fullPath.LastIndexOf(name))); request.Headers.Add("Origin", ConstSettings.CloudDomain); request.Host = url.Host; request.ContentType = ConstSettings.DefaultRequestType; request.Accept = "*/*"; request.UserAgent = ConstSettings.UserAgent; using (var s = request.GetRequestStream()) { s.Write(removeRequest, 0, removeRequest.Length); using (var response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode != HttpStatusCode.OK) { throw new Exception(); } } } }
      
      







mail.ruクラウドその他の操作については、上記の手順を繰り返し、ブラウザーから取得したデータの代わりにデータを置き換えます。



APIで作成したメソッドをリストします。



-フォルダーを作成する

-ファイルのコピー

-フォルダーのコピー

-ファイルのダウンロード(非同期操作)

-ファイルのアップロード(非同期操作)

-ファイルとフォルダーのリストを取得する

-公開ファイルのリンクを取得

-パブリックフォルダーのリンクを取得する

-直接ファイルリンクの取得(1つのセッションでの操作)

-ファイルを移動する

-フォルダーを移動する

-ファイル名を変更

-フォルダー名の変更

-ファイルを削除

-フォルダーを削除



私が書いたAPI は、リンクからダウンロードできます。 時間があり、このAPIに新しい機能を追加する場合は、プルリクエストを送信します。 これらはすべて「ひざの上に」書かれていますが、主なものは機能し、プロジェクトで自由に使用できます。



将来的には、このAPIが補完されます。たとえば、クラウドにアップロードするときに大きなファイルを可能な限り最大の部分に分割し、アップロードするときに、ファイル暗号化を追加して大きなファイルをアップロードします。 。



All Articles