次のエディターは、Web ページの自動操作とデータ収集を実現するために HTTP リクエストをシミュレートする方法に関する記事をお届けします。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。編集者と一緒に覗いてみてください
はじめに
Webページは、ニュースや株価などの情報提供サイトと事業運営カテゴリに分けられます。オンライン商館、OA等の事業運営。もちろん、Weibo、Douban、Taobao など、両方の特性を同時に備えた Web サイトも数多くあります。情報を提供するだけでなく、特定のビジネスも実行します。
通常のインターネットアクセス方法は手動操作が一般的です(説明の必要はありません:D)。ただし、インターネット上の大量のデータのクロール、ページの変更のリアルタイム監視、バッチ操作 (Weibo へのバッチ投稿、タオバオ ショッピングのバッチなど)、注文のブラウジングなど、手動操作では不十分な場合があります。手動操作は大量の操作と反復操作のため、非効率的でエラーが発生しやすくなります。このとき、ソフトウェアを使用して自動で動作させることができます。
Webクローラーや自動バッチ運用事業など、そのようなソフトウェアをいくつか開発してきました。使用されるコア機能の 1 つは、HTTP リクエストをシミュレートすることです。もちろん、HTTPS プロトコルが使用されることもあります。通常、さらなる操作を実行するには、Web サイトにログインする必要があります。最も重要な点は、Web サイトのビジネス プロセスを理解すること、つまり、いつ、どのように送信するかを知ることです。特定の操作を実行するためにどのページに移動するのか? 最後に、データを抽出したり、操作の結果を知るには、HTML を解析する必要もあります。この記事ではそれらを一つずつ説明していきます。
この記事ではコードを表示するために C# 言語を使用しています。もちろん、原理は同じです。 JD.com へのログインを例に挙げます。
HTTP リクエストのシミュレート
C# HTTP リクエストをシミュレートするには、次のクラスを使用する必要があります:
•WebRequest
•HttpWebRequest
•HttpWebResponse
• Stream
まずリクエストオブジェクト(HttpWebRequest)を作成し、関連するHeaders情報を設定してからリクエストを送信します(POSTの場合は、ターゲットアドレスがアクセス可能な場合、フォームデータをネットワークストリームに書き込みます)。応答オブジェクト ( HttpWebResponse ) を取得すると、返された結果は、対応するオブジェクトのネットワーク ストリームから読み取ることができます。
サンプルコードは次のとおりです:
String contentType = "application/x-www-form-urlencoded"; String accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*"; String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36"; public String Get(String url, String encode = DEFAULT_ENCODE) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; InitHttpWebRequestHeaders(request); request.Method = "GET"; var html = ReadHtml(request, encode); return html; } public String Post(String url, String param, String encode = DEFAULT_ENCODE) { Encoding encoding = System.Text.Encoding.UTF8; byte[] data = encoding.GetBytes(param); HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; InitHttpWebRequestHeaders(request); request.Method = "POST"; request.ContentLength = data.Length; var outstream = request.GetRequestStream(); outstream.Write(data, 0, data.Length); var html = ReadHtml(request, encode); return html; } private void InitHttpWebRequestHeaders(HttpWebRequest request) { request.ContentType = contentType; request.Accept = accept; request.UserAgent = userAgent; } private String ReadHtml(HttpWebRequest request, String encode) { HttpWebResponse response = request.GetResponse() as HttpWebResponse; Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(encode)); String content = reader.ReadToEnd(); reader.Close(); stream.Close(); return content; }
Get メソッドと Post メソッドのコードのほとんどが類似していることがわかります。そのため、コードはカプセル化され、同じコードが新しい関数として抽出されます。
HTTPSリクエスト
ウェブサイトがhttpsプロトコルを使用している場合、上記のコードで次のエラーが発生する可能性があります:
The underlying connection was closed: Could not establish trust relationship for
ブラウザで開くと、次のようなエラーが発生します。ページが表示されます:
[xxx.xx (安全ではありません) に進む] をクリックすると、引き続き Web ページを開くことができます。プログラムでは、このステップをシミュレートするだけで続行できます。 C# では、ServicePointManager.ServerCertificateValidationCallback プロキシを設定し、プロキシ メソッドで直接 true を返すだけで済みます。
private HttpWebRequest CreateHttpWebRequest(String url) { HttpWebRequest request; if (IsHttpsProtocol(url)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } return request; } private HttpWebRequest CreateHttpWebRequest(String url) { HttpWebRequest request; if (IsHttpsProtocol(url)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } return request; }
このようにして、https ウェブサイトに正常にアクセスできるようになります。
本人認証のために Cookie を記録する
一部の Web サイトでは、次のステップを実行するためにログインが必要です。たとえば、JD.com でのショッピングでは最初にログインする必要があります。 Web サイト サーバーはセッションを使用してクライアント ユーザーを記録し、各セッションはユーザーに対応し、前のコードはリクエストが作成されるたびにセッションを再確立します。ログインに成功した場合でも、次のステップで新しい接続が作成されるため、ログインは無効になります。現時点では、この一連のリクエストが同じセッションからのものであるとサーバーに認識させる方法を見つける必要があります。
クライアントは Cookie のみを持ち、次のリクエスト時にクライアントがどのセッションに対応するかをサーバーに知らせるために、Cookie にセッション ID の記録が存在します。したがって、Cookie が同じである限り、サーバーにとっては同じユーザーになります。
この時点では CookieContainer を使用する必要があります。名前が示すように、これは Cookie コンテナーです。 HttpWebRequest には CookieContainer プロパティがあります。各リクエストの Cookie が CookieContainer に記録されている限り、次のリクエストでは HttpWebRequest の CookieContainer 属性が設定されます。Cookie は同じであるため、サーバーにとっては同じユーザーになります。
public String Get(String url, String encode = DEFAULT_ENCODE) { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; InitHttpWebRequestHeaders(request); request.Method = "GET"; request.CookieContainer = cookieContainer; HttpWebResponse response = request.GetResponse() as HttpWebResponse; foreach (Cookie c in response.Cookies) { cookieContainer.Add(c); } }
Webサイトの分析とデバッグ
上記により、HTTPリクエストのシミュレーションが実現されました。もちろん、最も重要なのは分析ステーションです。一般的な状況としては、ドキュメントがなく、Web サイト開発者も見つからず、探索はブラック ボックスから始まります。多くの分析ツールがあります。Chrome+ プラグイン Advanced Rest Client を使用すると、Web ページを開いたときにバックグラウンドでどのような操作やリクエストが行われたかを知ることができます。
たとえば、JD.com にログインすると、次のデータが送信されます:
また、Jingdong のパスワードが実際には平文で送信されていることがわかり、セキュリティが非常に懸念されています。
返されたデータも確認できます:
返されたデータは JSON データですが、u8d26 これは何ですか?実際、これは Unicode エンコードです。Unicode エンコード変換ツールを使用して、読み取り可能なテキストに変換できます。たとえば、今回返される結果は、「アカウント名とパスワードが一致しません。再入力してください」です。
HTMLを解析する
HTTPリクエストによって取得されるデータは通常HTML形式ですが、場合によってはJsonやXMLの場合もあります。有用なデータを抽出するには解析が必要です。 HTML を解析するコンポーネントは次のとおりです:
•HTML パーサー。 Java/C#/Python などの複数のプラットフォームで利用できます。長い間使っていない。
•HTMLアジリティパック。 XPath 経由で HMTL を解析する。いつも使っています。 XPath チュートリアルについては、W3School の XPath チュートリアルを参照してください。
結論
この記事では、HTTP/HTTPS リクエストのシミュレートから Cookie、Web サイトの分析、HTML の解析まで、シミュレートされた自動 Web ページ操作を開発するために必要なスキルを紹介します。このコードは使用方法を説明することを目的としており、完全なコードではないため、直接実行できない場合があります。
以上がWebページの自動操作やデータ収集を実現するHTTPリクエストをシミュレートする手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C#.NETは、C#言語と.NETフレームワークの利点を組み合わせた強力な開発プラットフォームです。 1)エンタープライズアプリケーション、Web開発、ゲーム開発、モバイルアプリケーション開発で広く使用されています。 2)C#コードは中間言語にコンパイルされ、.NETランタイム環境によって実行され、ガベージコレクション、タイプの安全性、LINQクエリをサポートします。 3)使用の例には、基本的なコンソール出力と高度なLINQクエリが含まれます。 4)空の参照やタイプ変換エラーなどの一般的なエラーは、デバッガーとロギングを通じて解決できます。 5)パフォーマンスの最適化の提案には、非同期プログラミングとLINQクエリの最適化が含まれます。 6)競争にもかかわらず、C#.NETは継続的なイノベーションを通じて重要な地位を維持しています。

C#.NETの将来の傾向は、主にクラウドコンピューティング、マイクロサービス、AIおよび機械学習統合、およびクロスプラットフォーム開発の3つの側面に焦点を当てています。 1)クラウドコンピューティングとマイクロサービス:C#.NETは、Azureプラットフォームを介してクラウド環境のパフォーマンスを最適化し、効率的なマイクロサービスアーキテクチャの構築をサポートします。 2)AIと機械学習の統合:ML.NETライブラリの助けを借りて、C#開発者はアプリケーションに機械学習モデルを埋め込み、インテリジェントアプリケーションの開発を促進できます。 3)クロスプラットフォーム開発:.NetCoreおよび.Net5を介して、C#アプリケーションはWindows、Linux、およびMacOで実行され、展開範囲が拡大します。

C#.NET開発における最新の開発とベストプラクティスには、次のものが含まれます。1。非同期プログラミングは、アプリケーションの応答性を向上させ、Asyncを使用して非ブロッキングコードを簡素化し、キーワードを待ちます。 2。LINQは強力なクエリ関数を提供し、遅延した実行および式ツリーを介してデータを効率的に操作します。 3.パフォーマンスの最適化の提案には、非同期プログラミングの使用、LINQクエリの最適化、メモリの合理的な管理、コードの読みやすさとメンテナンスの改善、単体テストの書き込みが含まれます。

.NETを使用してアプリケーションを構築する方法は? .NETを使用してアプリケーションを構築することは、次の手順を通じて達成できます。1)C#言語やクロスプラットフォーム開発サポートを含む.NETの基本を理解します。 2)コンポーネントや.NETエコシステムの作業原則などのコア概念を学習します。 3)単純なコンソールアプリケーションから複雑なWebAPISおよびデータベース操作まで、基本的および高度な使用をマスターします。 4)構成やデータベース接続の問題など、一般的なエラーとデバッグ手法に精通している。 5)アプリケーションのパフォーマンスの最適化と非同期プログラミングやキャッシュなどのベストプラクティス。

C#は、エンタープライズレベルのアプリケーション、ゲーム開発、モバイルアプリケーション、Web開発で広く使用されています。 1)エンタープライズレベルのアプリケーションでは、C#がasp.netcoreにWebAPIを開発するためによく使用されます。 2)ゲーム開発では、C#がUnityエンジンと組み合わされて、ロールコントロールやその他の機能を実現します。 3)C#は、コードの柔軟性とアプリケーションのパフォーマンスを改善するために、多型と非同期プログラミングをサポートします。

C#と.NETは、Web、デスクトップ、モバイル開発に適しています。 1)Web開発では、ASP.Netcoreがクロスプラットフォーム開発をサポートしています。 2)デスクトップ開発では、さまざまなニーズに適したWPFとWINFORMSを使用します。 3)モバイル開発は、Xamarinを介したクロスプラットフォームアプリケーションを実現します。

C#.NETエコシステムは、開発者がアプリケーションを効率的に構築できるようにするための豊富なフレームワークとライブラリを提供します。 1.ASP.NETCOREは、高性能Webアプリケーションの構築に使用されます。2.EntityFrameWorkCoreは、データベース操作に使用されます。これらのツールの使用とベストプラクティスを理解することにより、開発者はアプリケーションの品質とパフォーマンスを向上させることができます。

c#.netアプリをAzureまたはAWSに展開する方法は?答えは、AzureAppServiceとAwselasticBeanStalkを使用することです。 1。Azureでは、AzureAppServiceとAzurePipelinesを使用して展開を自動化します。 2。AWSでは、Amazon ElasticBeanstalkとAwslambdaを使用して、展開とサーバーレス計算を実装します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









