[iOS][HTTPStatusCode]インターネットへ接続 例

#インターネットへ接続
##HTTPステータスコード
サーバーからブラウザに返してくるコードのことをステータスコードといいますが、これには

+ 100番台 案内（インフォメーション）
+ 200番台 正常処理
+ 300番台 移転通知
+ 400番台 （クライアントにおける）処理失敗
+ 500番台 サーバーエラー

があり、400番台と500番台がいわゆるエラーコードとなります。
正常処理である200番台は通常ブラウザに表示されることはありませんので、ここでは300番台～500番台までの主なステータスコードについてのみ取り上げます。

---

300番台
---
300	Multiple Choices	複数ページの利用が可能です。
301	Moved Parmanently	このアドレスは違うアドレスに移動しました。
302	Moved Temporarily	このアドレスは一時的に別のアドレスにおいています。
303	See Other	他のページを参照してください。
304	Not Modified	アクセスは許可されたが、対象の文書は更新されていなかった。
305	Use Proxy	LocationフィールドのProxy経由でないとアクセス許可されません。
307	Temporary Redirect	このアドレスは一時的に別のアドレスに属しています。

---

400番台
---
400	Bad Request	タイプミス等、リクエストにエラーがあります。
401	Unauthorixed	認証に失敗しました。（パスワードを適当に入れてみた時などに発生）
402	Payment Required	（将来の使用のための予約コード）
403	Forbidden	あなたにはアクセス権がありません。
404	(File)Not Found	該当アドレスのページはありません、またはそのサーバーが落ちている。
405	Method Not Allowed	許可されていないメソッドタイプのリクエストを受けた。
406	Not Acceptable	Acceptヘッダから判断された結果、受け入れられない内容を持っていた。
407	Proxy Authentication Required	最初にProxy認証が必要です。
408	Request Time-out	リクエストの待ち時間内に反応がなかった。
409	Conflict	そのリクエストは現在の状態のリソースと矛盾するため完了できなかった。
410	Gone	そのリクエストはサーバでは利用できず転送先のアドレスも分からない。
411	Length Required	定義されたContent-Lengthの無いリクエストを拒否しました。
412	Precondition Failed	1つ以上のリクエストヘッダフィールドで与えられた条件がサーバ上のテストで不正であると判断しました。
413	Request Entity Too Large	処理可能量より大きいリクエストのため拒否しました。
414	Request-URI Too Large	リクエストURIが長すぎるため拒否しました。
415	Unsupported Media Type	リクエストされたメソッドに対してリクエストされたリソースがサポートしていないフォーマットであるため、サーバはリクエストのサービスを拒否しました。
416	Requested range not satisfiable	リクエストにRangeヘッダフィールドは含まれていたが、If-Rangeリクエストヘッダフィールドがありません。
417	Expectation Failed	Expectリクエストヘッダフィールド拡張が受け入れられなかった。

---

500番台
---
500	Internal Server Error	CGIスクリプトなどでエラーが出た。
501	Not Implemented	リクエストを実行するための必要な機能をサポートしていない。
502	Bad Gateway	ゲートウェイやProxyとして動作しているサーバがリクエストを実行しようとしたら不正なレスポンスを受け取った。
503	Service Unavailable	そのアドレスは事情によりアクセスできません。
503.1	Mapping Server Error	クリッカブルマップで、変なアドレスを指定した。
503.2	Too many users	この時間このページにアクセスできる定員オーバーをしました。
503.3	Method Not Allowed	CGIで送信時にPOSTかGETの一方しかできないのに、違う方を行った。
504	Gateway Time-out	リクエストを完了するために必要なDNSなどのサーバからレスポンスを受信できなかった。
505	HTTP Version not supported	サポートされていないHTTPプロトコルバージョンを受けた。

###HTTPStatusCode[iOS]で表示したい時に使う
使いどころは、ネットワークがらみの時ですかね。

~~~ObjectiveC
+ (NSDictionary *)HTTPStatusCodeInfo
{
   return @{
       // 300番台
       @"300":@{
          @"title":@"Multiple Choices",
          @"discription":@"複数ページの利用が可能です",
       },
       @"301":@{
          @"title":@"Moved Parmanently",
          @"discription":@"このアドレスは違うアドレスに移動しました",
       },
       @"302":@{
          @"title":@"Moved Temporarily",
          @"discription":@"このアドレスは一時的に別のアドレスにおいています",
       },
       @"303":@{
          @"title":@"See Other",
          @"discription":@"他のページを参照してください",
       },
       @"304":@{
          @"title":@"Not Modified",
          @"discription":@"アクセスは許可されたが、対象の文書は更新されていなかった",
       },
       @"305":@{
          @"title":@"Use Proxy",
          @"discription":@"LocationフィールドのProxy経由でないとアクセス許可されません",
       },
       @"307":@{
          @"title":@"Temporary Redirect",
          @"discription":@"このアドレスは一時的に別のアドレスに属しています",
       },
       ///400番台
       @"400":@{
          @"title":@"Bad Request",
          @"discription":@"タイプミス等、リクエストにエラーがあります",
       },
       @"401":@{
          @"title":@"Unauthorixed",
          @"discription":@"認証に失敗しました。（パスワードを適当に入れてみた時などに発生）",
       },
       @"402":@{
          @"title":@"Payment Required",
          @"discription":@"（将来の使用のための予約コード）",
       },
       @"403":@{
          @"title":@"Forbidden",
          @"discription":@"あなたにはアクセス権がありません",
       },
       @"404":@{
          @"title":@"(File)Not Found",
          @"discription":@"該当アドレスのページはありません、またはそのサーバーが落ちている",
       },
       @"405":@{
          @"title":@"Method Not Allowed",
          @"discription":@"許可されていないメソッドタイプのリクエストを受けた",
       },
       @"406":@{
          @"title":@"Not Acceptable",
          @"discription":@"Acceptヘッダから判断された結果、受け入れられない内容を持っていた",
       },
       @"407":@{
          @"title":@"Proxy Authentication Required",
          @"discription":@"最初にProxy認証が必要です",
       },
       @"408":@{
          @"title":@"Request Time-out",
          @"discription":@"リクエストの待ち時間内に反応がなかった",
       },
       @"409":@{
          @"title":@"Conflict",
          @"discription":@"そのリクエストは現在の状態のリソースと矛盾するため完了できなかった",
       },
       @"410":@{
          @"title":@"Gone",
          @"discription":@"そのリクエストはサーバでは利用できず転送先のアドレスも分からない",
       },
       @"411":@{
          @"title":@"Length Required",
          @"discription":@"定義されたContent-Lengthの無いリクエストを拒否しました",
       },
       @"412":@{
          @"title":@"Precondition Failed",
          @"discription":@"1つ以上のリクエストヘッダフィールドで与えられた条件がサーバ上のテストで不正であると判断しました",
       },
       @"413":@{
          @"title":@"Request Entity Too Large",
          @"discription":@"処理可能量より大きいリクエストのため拒否しました",
       },
       @"414":@{
          @"title":@"Request-URI Too Large",
          @"discription":@"リクエストURIが長すぎるため拒否しました",
       },
       @"415":@{
          @"title":@"Unsupported Media Type",
          @"discription":@"リクエストされたメソッドに対してリクエストされたリソースがサポートしていないフォーマットであるため、サーバはリクエストのサービスを拒否しました",
       },
       @"416":@{
          @"title":@"Requested range not satisfiable",
          @"discription":@"リクエストにRangeヘッダフィールドは含まれていたが、If-Rangeリクエストヘッダフィールドがありません",
       },
       @"417":@{
          @"title":@"Expectation Failed",
          @"discription":@"Expectリクエストヘッダフィールド拡張が受け入れられなかった",
       },
       // 500番台
       @"500":@{
          @"title":@"Internal Server Error",
          @"discription":@"CGIスクリプトなどでエラーが出た",
       },
       @"501":@{
          @"title":@"Not Implemented",
          @"discription":@"リクエストを実行するための必要な機能をサポートしていない",
       },
       @"502":@{
          @"title":@"Bad Gateway",
          @"discription":@"ゲートウェイやProxyとして動作しているサーバがリクエストを実行しようとしたら不正なレスポンスを受け取った",
       },
       @"503":@{
          @"title":@"Service Unavailable",
          @"discription":@"そのアドレスは事情によりアクセスできません",
       },
       @"503.1":@{
          @"title":@"Mapping Server Error",
          @"discription":@"クリッカブルマップで、変なアドレスを指定した",
       },
       @"503.2":@{
          @"title":@"Too many users",
          @"discription":@"この時間このページにアクセスできる定員オーバーをしました",
       },
       @"503.3":@{
          @"title":@"Method Not Allowed",
          @"discription":@"CGIで送信時にPOSTかGETの一方しかできないのに、違う方を行った",
       },
       @"504":@{
          @"title":@"Gateway Time-out",
          @"discription":@"リクエストを完了するために必要なDNSなどのサーバからレスポンスを受信できなかった",
       },
       @"505":@{
          @"title":@"HTTP Version not supported",
          @"discription":@"サポートされていないHTTPプロトコルバージョンを受けた",
       },
   }
}

+ (NSString *)HTTPStatusCodeDiscription:(NSInteger)HTTPStatusCode
{ 
  NSString *key = [NSString stringWithFormat:@"%d",(int)HTTPStatusCode];
  return [self HTTPStatusCodeInfo][key][@"discription"];
} 

~~~

補足

~~~ObjectiveC
@interface //クラス ()

@property (nonatomic, retain) NSMutableData *receivedData;
@property (nonatomic, retain) NSDictionary *responseDict;

@end

@implementation //クラス

///
- (void)HTTPURLResponse {
    NSString *httpString = @"https://graph.facebook.com/?id=http://sunstripe.main.jp";
    NSError *error = nil;
    NSURLResponse *response = nil;
    self.receivedData = [[NSMutableData alloc] init];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:httpString]];
    [request setHTTPMethod:@"GET"];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    if(data){
        _responseDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    }
    
    NSHTTPURLResponse *HTTPURLResponse = nil;
    HTTPURLResponse = (NSHTTPURLResponse *)response;
    NSLog(@"HTTPURLResponse.statusCode : %d",(int)HTTPURLResponse.statusCode);

}
~~~

~~~HTTPURLResponse.log

HTTPURLResponse.statusCode : 200

~~~

## 関連記事
[About](http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ
http://sunstripe.main.jp/sunstripe/
(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)


### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。