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

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

新規登録して質問してみよう
ただいま回答率
87.20%
C#

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

受付中

【C#】CloudFlareを使用しているサイトからGetリクエストを取得したい

OXamarin
OXamarin

総合スコア59

C#

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

1回答

0リアクション

2クリップ

255閲覧

投稿2022/08/13 09:42

前提

言語 C#
フレームワーク .NET 6

CloudFlareを使用しているサイトに対してGetリクエストを行ってjsonの結果を取得したいが想定と違う結果が返ってくる

以下のサイトにブラウザからアクセスするとjson形式で値が返ってくる
https://api-mainnet.magiceden.io/rpc/getListedNFTsByQueryLite?q=%7B%22%24match%22%3A%7B%22collectionSymbol%22%3A%22darleygo_genesis_horses%22%2C%22takerAmount%22%3A%7B%22%24lte%22%3A2000000000%7D%7D%2C%22%24sort%22%3A%7B%22takerAmount%22%3A1%7D%2C%22%24skip%22%3A0%2C%22%24limit%22%3A20%2C%22status%22%3A%5B%5D%7D

実際に返ってくる値

html

<!DOCTYPE html> <html lang="en-US"> <head> <title>Just a moment...</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta name="robots" content="noindex,nofollow" /> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link href="/cdn-cgi/styles/cf-errors.css" rel="stylesheet" /> <script> (function(){ window._cf_chl_opt={ cvId: '2', cType: 'managed', cNounce: '11349', cRay: '73a06d4c69848072', cHash: '8a609977e5c11d7', cUPMDTk: "\/rpc\/getListedNFTsByQueryLite?q=%7B%22%24match%22%3A%7B%22collectionSymbol%22%3A%22darleygo_genesis_horses%22%2C%22takerAmount%22%3A%7B%22%24lte%22%3A2000000000%7D%7D%2C%22%24sort%22%3A%7B%22takerAmount%22%3A1%7D%2C%22%24skip%22%3A0%2C%22%24limit%22%3A20%2C%22status%22%3A%5B%5D%7D&__cf_chl_tk=aTk4NkH.1bk2qTLw4D8YZ8uDaRxZgZAjMr1KwjxSLmA-1660382972-0-gaNycGzNBuU", cFPWv: 'g', cTTimeMs: '1000', cTplV: 3, ………(中略)……… <div class="footer" role="contentinfo"> <div class="footer-inner"> <div class="clearfix diagnostic-wrapper"> <div class="ray-id">Ray ID: <code>73a06d4c69848072</code></div> </div> <div class="text-center"> Performance &amp; security by <a rel="noopener noreferrer" href="https://www.cloudflare.com?utm_source=challenge&utm_campaign=m" target="_blank">Cloudflare</a> </div> </div> </div> </body> </html>

実現したいこと

ブラウザからアクセスした時と同様のjsonを取得したい

試したこと

一旦、以下の3つの方法でアクセスしてみましたが、jsonではなく上記のhtmlが返されました。
・ WebRequest
・ HTTPclient
・ Playwrightのリクエストコンテキスト

次に、CloudFlareのAnti DDos Protection機能を備えてそうなライブラリを使用してみました。
https://github.com/elcattivo/CloudFlareUtilities
https://github.com/zingz0r/CloudFlare.Client
https://github.com/RyuzakiH/CloudflareSolverRe

これらを試しても同様にHTMLしか返ってきていない事までは確認済みです。

どういう取得の仕方をしているのかを念のため記載しておきます。
ライブラリのusage通りの取得方法です。

C#

static async Task Main(string[] args) { // Create the clearance handler. var handler = new ClearanceHandler { MaxRetries = 2 // Optionally specify the number of retries, if clearance fails (default is 3). }; _httpClient = new HttpClient(handler); var fuga = await _httpClient.GetRequestAsync<MagicEdenDarley>(URL); } public static async Task<T?> GetRequestAsync<T>(this HttpClient httpClient, string url) { using (var request = new HttpRequestMessage(new HttpMethod("GET"), url)) using (var res = await httpClient.SendAsync(request)) { try { var json = await res.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize<T?>(json); } catch { return default; } } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2022/08/13 12:46

ブラウザでないと結果が得られないというのは普通にあって、例えば SPA などブラウザでスクリプトが動いて結果を表示するのですが、それと似たような話ではないのですか?
SurferOnWww

2022/08/14 23:09

質問者さん、無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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