0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[C#] C#でGET/POST要求を実装する

Posted at

そもそもHTTPとは

 HttpとはHypertext Transfer Protocolの略で、直訳するとハイパーテキストを転送するプロトコルないしは規格となります。これでは何を言っているのかがさっぱりなので例を挙げましょう。
 世界中には英語を筆頭に7000近い数の言語が存在すると言われています。しかしながら、7000近い言語をすべて習得するなんてことは到底できません。そこで、違う国の人同士で話すときには英語といった世界的に普及している言葉を使うのです。
 インターネット上でも、要求をするときの書き方がいくつもあっては通信なんて到底できません。そこで、httpという規格が存在しているのです。

目次
GET要求
POST要求

GET要求

 GET要求はWebサーバにデータを送るように要求するものです。以下のような内容になっています。

GET https://example.com/ HTTP/1.1
Host: example.com
...

 これは example.com に対してGET要求を送るというものです。その結果として以下のようなレスポンスが帰ってきます。二行目以降はメッセージヘッダといって自分の言語や環境などの追加の情報が記述されています。これによって、スマホ版とPC版のサイトどちらを送るべきか、日本語と英語どちらで送るべきかなどを判断しているわけなのです。

StatusCode        : 200
StatusDescription : OK
Content           : <!doctype html>
                    
                    ~~~webサイトのコンテンツ~~~

RawContent        : HTTP/1.1 200 OK
...

 StatusCodeが200,300番台だと成功してます。逆に400,500番台だとエラーが起きています。
普段私達はContentに当たる内容を見ているわけです。
 これをC#で実装するとこうなります。

GET.cs
using System.Net.Http;
//System.Net.Http名前空間のHttpClientを使う

string uri = "https://example.com"; //uriを入力

HttpClient httpclient = new HttpClient();

HttpResponseMessage response = await httpclient.GetAsync(uri); //uriにGET要求
string responsestr = await response.Content.ReadAsStringAsync(); //レスポンスのContentをstring型として読み込む
Console.WriteLine(responsestr);
出力
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    ...

 ここでは、responseが返答でありそのうちのContentをstring型として読み込んで出力しています。

POST要求

 POST要求も同様にサーバーにデータを送るように要求するものですが、大きな違いがあります。それは、パラメータをメッセージヘッダに含ませるので、送信するデータ量に制限がないということです。
 C#で記述するとこうなります。

POST.cs
using System.Net.Http;
//Post要求でもSystem.Net.Http名前空間のHttpClientを使う

string uri = ""; //Uriを設定
StringContent content = ""; //送信するContentを設定
HttpResponseMessage response = await httpClient.PostAsync(uri,content);

 StringContent以外にも送信可能なデータの型はあります。詳しくは、HttpContent/Microsoft Learnを参照してください

参考文献

HTTP要求の詳しい内容についてはこのサイトがとてもわかり易いです。

HTTPの仕組み(パケットキャプチャで学ぼう!)

C#でのGet,Post要求の詳細やその他のhttp要求についてはMicrosoftドキュメントを参考にしてください。

HttpClient クラスを使用して HTTP 要求を行う

 ネットワーク関係の知識に疎いのでご指摘等ございましたら、コメントにてご教授ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?