92190


提示コードですが以下のマストドンサイトのAPIでjsonを得るのコードなのですがなぜ`///`コメント内部のコードで例外が発生するのでしょうか？原因がわかりません。

色々調べたことによるとURLには問題はなくサーバーが自分のリクエストを弾いてることが問題のようで`user-
agent`を設定したように今回も似たような設定が必要と考えて  
`WebHeaderCollection.Add()`に値を設定したいのですがどれも例外が発生してしまいます。これはどうやって値を設定するのでしょうか？

##### 例外メッセージ

リモート サーバーがエラーを返しました: (403) 使用不可能

##### 試したこと

URLのリダイレクトURIを書き換える  
リファレンスサイトを確認  
`"http://www.google.co.jp/"`の場合は４０３が発生せずコードが実行できます  
リクエストヘッダーサイトを参考に`req.Headers.Set`をにいろいろ値を設定しましたがどれも例外が発生します。

##### ソースコード

参考サイトのリファレンスから`OAuth2 資格情報を取得するための新しいアプリケーションを作成します。`  
のjsonを得るコードです。

##### 参考サイト

リファレンス: <https://docs.joinmastodon.org/methods/apps/>  
GetResponece(): <https://learn.microsoft.com/ja-
jp/dotnet/api/system.net.webrequest.getresponse?view=net-7.0>  
エラーサイト：https://www.innovation.co.jp/urumo/http_error/  
リクエストヘッダー: <https://developer.mozilla.org/ja/docs/Glossary/Request_header>

##### 提示コード

[code]

            private static async Task test_run()
            {            
    
                
    //            var req = WebRequest.Create("http://www.google.co.jp/");
                var req = WebRequest.Create("https://mstdn.jp/api/v1/timelines/public");
                //var req = WebRequest.Create("https://mstdn.jp/api/v1/apps?client_name=test&redirect_uris=https%3A%2F%2Fmstdn.jp%2Fauth%2Fsign_in");
                //var req = WebRequest.Create("https://mstdn.jp/api/v1/apps?client_name=test&redirect_uris=urn:ietf:wg:oauth:2.0:oob");
    
                
                Console.WriteLine("aaaaaa");
                ///////////////////////////////////////////////////////////////////////////////
                //req.Headers.Set("User-Agent","Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko");
                //req.Headers.Set("Host","Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko");
                //req.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko");
                req.Headers.Add("Accept-Language:ja,en-us;q=0.7,en;q=0.3");
    
    
    ///////////////////////////////////////////////////////////////////////////////
    
                try
                {
                    var res = req.GetResponse();
                }catch(System.Net.WebException e)
                {
                    Console.WriteLine(e.Message);
                }
    
                //////////////////////////////////////////////////////////////////////////////
                Console.WriteLine("bbbbbb");
    
                Console.ReadKey();
                /*
                // レスポンス(JSON)をオブジェクトに変換
                ServiceResult info;
                using (res)
                {
                    using (var resStream = res.GetResponseStream())
                    {
                        var serializer = new DataContractJsonSerializer(typeof(ServiceResult));
                        info = (ServiceResult)serializer.ReadObject(resStream);
                    }
                }
                */
    
                Console.ReadKey();
    
    
    
            }
    
    
            private static async void test()
            {
                Task.WaitAll(test_run());
    
            }
    
            static void Main(string[] args)
            {
               // t();
    
                test();
    
    
    
            }
    
    
            [DataContract]
            public class ServiceResult
            {
    
                [DataMember]
                public string id { get; set; }
                [DataMember]
                public string name { get; set; }
    
            }
    
    
[/code]


CC BY-SA 4.0
2022-11-12T12:33:24.637
92187
2022-11-14T22:13:10.450
2022-11-13T01:38:33.230
55177
55177
question
c#
WebHeaderCollection.Add()の正確な設定方法が知りたい


[403 Forbidden](https://developer.mozilla.org/ja/docs/Web/HTTP/Status/403)は
~~認証エラー~~
認可エラーです。質問のコードには認証認可に関する処理が含まれていないので、何を指定しても認可エラーになるのは当然の結果です。逆に認可を必須としていないGoogleでエラーにならないのも当然です。

[Logging in with an account](https://docs.joinmastodon.org/client/authorized/)
に従い、認証および認可の処理を済ませてから実行してください。

> ## Client ID and secret
>
> First, if you have not already registered a client application, then see
> Creating our application on the previous page or go directly to POST
> /api/v1/apps for the full documentation of that method. We will need the
> `client_id` and `client_secret` for our application.

とあり、内容を読んでいないと `/api/v1/apps`
を呼び出し可能と思われるかもしれませんが、このAPIを呼び出すためにも認証処理が必要です。鶏と卵状態であり、それを解決するための方法が「see
Creating our application on the previous page」なわけです。

登録が済んだら`client_id`（クライアントキー）と`client_secret`（クライアントシークレット）を入手できているはずですので、Authorize
the user以降の手順を実施してください。

* * *

> var req =
> WebRequest.Create("https://mstdn.jp/api/v1/apps?client_name=test&redirect_uris=https%3A%2F%2Fmstdn.jp%2Fauth%2Fsign_in");を実行しても依然として403エラーが発生するのですがはやり何か別の何かだと思うのですがどうなのでしょうか？

は「内容を読んでいないと `/api/v1/apps`
を呼び出し可能と思われるかもしれませんが、このAPIを呼び出すためにも認証処理が必要です。」と書いた通りです。回答をよく読んでください。


CC BY-SA 4.0
2022-11-13T01:38:19.623
92190
2022-11-14T22:13:10.450
2022-11-14T22:13:10.450
4236
4236
92187
answer