質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

2回答

4561閲覧

C#でjsonをブラウザゲームから取得する方法について。

mi2ra6ge7

総合スコア11

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

1クリップ

投稿2015/04/09 10:20

編集2015/04/09 10:22

こんばんは、こちらで初質問をさせて頂くものです。
現在アニメ化などで有名になっている「艦これ」というゲームの専用ブラウザを開発しているのですが、母港のjsonのHttpWebRequestを作成してHttpWebResponseをGetResponseするところで403Forbiddenエラーが発生していまいます。
また、こんな方法でも出来ると言うのがありましたらぜひお願いします。
↓に該当する部分のコードを載せます。

lang

1 2 String strUrl = webBrowser1.Url.ToString(); 3 if (strUrl == "http://www.dmm.com/netgame/social/-/gadgets/=/app_id=854854/" && webBrowser1.ReadyState == WebBrowserReadyState.Complete) 4 { 5 try 6 { 7 String portUrl = "http://203.104.209.23/kcsapi/api_port/port"; 8 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(portUrl); 9 HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 10 Stream st = res.GetResponseStream(); 11 RootObject.ApiMaterial port; 12 13 using (st) 14 { 15 var serializer = new DataContractJsonSerializer(typeof(RootObject.ApiMaterial)); 16 port = (RootObject.ApiMaterial)serializer.ReadObject(st); 17 } 18 }catch(WebException webExcp) 19 { 20 if (webExcp.Status == WebExceptionStatus.ProtocolError) 21 { 22 HttpWebResponse errres = (HttpWebResponse)webExcp.Response; 23 Console.WriteLine("{0}:{1}", errres.StatusCode, errres.StatusDescription); 24 } 25 else 26 Console.WriteLine(webExcp.Message); 27 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

いま質問者さんがやろうとしているものはWebブラウザそのものの製作です。
通信機能、認証機能、表示機能、Flash呼び足しなど、標準的なブラウザの機能全てを自分で作るつもりなのでしょうか?難易度は非常に高いです。
世に出ている専用ブラウザ類は(C#のものは)ほぼ全てフレームワーク標準のWebBrowserコンポーネントを使用して作られています。IEをGUIに配置して使うことができるものです。
この内部IEとゲームサーバ間の通信を横から全て取得することができるライブラリがあります。FiddlerCoreと言います。
全てのセッション内容をイベントとして取得できる強力なライブラリです。
まずはこれらを使用して普通のWebページの通信を取得できるようにしましょう。JSON云々はもっと先の話です。

投稿2015/04/10 06:01

tamoto

総合スコア4103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mi2ra6ge7

2015/04/10 09:14

申し訳ありません、言葉が足りませんdした。ここでは載せませんでしたがwebBrowserコンポーネントとFIddlerCoreの実装はしています。このコードはFiddlerCoreのAfterSessionCompleteメソッド内のコードです。
mi2ra6ge7

2015/04/10 09:15

↑ミスって打ち間違えてしまいました。すいませんm(_)m
tamoto

2015/04/10 12:49

そういうことでしたか。 では、まずは上のコードが"やっていること"を自分で読み上げてみてください。 このコードは以下のように動作しています。 1. WebBrowserが通信を行ったら(AfterSessionCompleteが発動したら) 2. WebBrowserのURLを取得し、比較する 3. 2が一致していたら、「新しいセッション立ててゲームサーバにリクエストを投げる」←??? WebBrowserの通信とは全く別にサーバーにリクエストを投げていることが分かると思います。あきらかにおかしいことが分かると思います。 WebBrowserが確立したセッションから通信内容を拾わなければならないということは分かっていますね? FiddlerのAfterSessionCompleteは、引数にFiddler.Sessionクラスを持っています。 このクラスには、AfterSessionCompleteが発火したときのセッションにおける「パスとクエリ」「送信したデータ」「受信したデータ」が全て入っています。 これで十分なヒントになっていると思うので、後はいろいろ試してみてください。試行錯誤で覚えるのが一番早いです。頑張ってください。 あと、上のコードで行われている「WebRequestを立ててゲームサーバに直接アクセスする」のは、一発でBAN対象になるはずの禁止行為なのでもう実行しないようにしてくださいね。
mi2ra6ge7

2015/04/13 12:35

返信遅れてすいません、解決しました。流れてくるレスポンスを見るのに自分から新しくリクエスト作ってどうするんだって話ですよね……本当にありがとうございます。
guest

0

KanColleViewerなど艦これ用のブラウザがGitHubで公開されています。
それ参考にしたらどうでしょう。

投稿2015/04/09 13:56

編集2015/04/09 14:04
ozwk

総合スコア13512

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mi2ra6ge7

2015/04/10 09:19

KanColleBrowserなどのソースが公開されているモノは自分が見つけた限りでは全部読みましたが、中々自分には理解できなくて質問させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問