|
ニュース検索
ピックアップ
今週のIT求人情報
|
.NET とAIでスパムボットに対抗する(4)
前回「独自 CAPTCHA アプリケーションの開発」へ
CAPTCHA を Web サービスから配布または呼び出す方法Webサービスとは、URIでアドレスを指定できるソフトウェアコンポーネントである。Webサービスでは、さまざまなニッチな需要を満たす多様なサービスを提供することができる。ここでは、他のアプリケーションのためにCAPTCHA画像を提供するWebサービスの作成方法について説明する。具体的には、Webメソッドの公開、BLOB(binary large object)またはBase64エンコードデータの転送、Webメソッドの呼び出しを行うためのテクニックを紹介する。 これから説明するのはcaptchaWebServiceというWebサービスである。このWebサービスには、 このプラットフォーム非依存のコンポーネントアーキテクチャには、もう1つ大きな利点がある。それは、CAPTCHアルゴリズムはボットに対抗して一元的に修正、拡張、強化することができ、すべてのクライアントがその恩恵を受けることができるということだ。CAPTCHAアプリケーションサービスプロバイダは、このサービスを低価格で提供してもよいし、定額制または従量制で提供してもよい。どのような形で提供するかはビジネスプロセスモデルしだいである。 図3.1:提供可能なWebサービス一覧の例 ![]() 関数に関するWSDL(web service description language)ファイルについてはここを参照。このファイルには、関数シグネチャとパラメータの詳細がそれぞれのデータ型と共に記されている。 関数 selectWord()
[WebMethod(Description="Get an Word from OGDEN’s dictionary")]
public String selectWord ()
このWebメソッドは、既に紹介したものによく似ている。唯一異なるのは、 図3.5:selectWordメソッドを呼び出した結果 ![]() 図3.4:selectWordメソッドを再び呼び出した結果 ![]() generateImage()
[WebMethod(Description="Generates a CAPTCHA Image and returns filename")]
public String generateImage ()
このメソッドは画像を生成し、物理的にディスクに格納する。画像の生成に成功すると、次の図のようにファイル名を返す。 図3.6:生成された画像のファイル名 ![]() getCaptcha()
[WebMethod(Description="Returns a CAPTCHA Image in Base64-Encoding")]
publicbyte[] getCaptcha()
図3.7:invoke.aspxとgetCaptchaメソッドの使用例 ![]() 次の図は、invoke.aspxを何度か実行した結果である。さまざまな種類のCAPTCHA画像が描画されることに注目してほしい。 ![]() ![]() 本稿ではこのWebサービスのすべてのソースコードを提供しているので、自由に実装したり、試したりしてほしい。ただし、このサンプルではプロキシクラスとアセンブリをprocess.batで生成している。これは、Visual Studio.NETを使わずにプロキシクラスを生成する人にとっては便利な方法である。このプロセスは次のようになる。 図3.9:process.bat ![]() 次にprocess.bat、invoke.aspx、captchaWebService.asmxのコードリストを示す。コードの詳細についてはコメントを見てほしい。 リスト:process.bat
wsdl /l:cs /o:captchaWebService.cs http://localhost/captchawebservice/captchaWebService.asmx?WSDL リスト:invoke.aspx
<%@ Page Language="c#" debug="True" %> <%@ Import namespace="captchaWebService" %> <script language="c#" runat="server"> publicvoid Page_Load(System.Object sender,System.EventArgs e) { Page.Response.BinaryWrite(new captchaWebService().getCaptcha()); } </script> リスト:captchaWebService.asmx
<%@ webservice class="captchaWebService" language="c#" %> using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; using System.IO; using System.Data.OleDb; using System.Drawing; using System.Drawing.Imaging; ///<summary> /// This is the basic Service for CAPTCHA provision. ///</summary> [WebService(Namespace="http://axisebusiness.com/webservices/")] publicclass captchaWebService : System.Web.Services.WebService { [WebMethod(Description="Returns a CAPTCHA Image in Base64-Encoding")] publicbyte[] getCaptcha() { return getBytesFromRaster(Server.MapPath(generateImage())); } // Returns byte from Image file publicbyte[] getBytesFromRaster(string filename) { if(File.Exists(filename)) { try { FileStream s =File.OpenRead(filename); byte[] bytes = newbyte[s.Length]; s.Read(bytes, (int)0, (int)s.Length); return bytes; } catch(Exception e) { returnnewbyte[0]; } } else { returnnewbyte[0]; } } [WebMethod(Description="Generates a CAPTCHA Image and returns filename")] public String generateImage () { //Reading the parameter from session this time String strText = selectWord ();// = Session("param") //Create the memory map Bitmap raster; System.Drawing.Imaging.PixelFormat pixFormat = 著者紹介Adnan Masood(Adnan Masood)
ロンドンのUKIMのソフトウェア開発者。UNW Stratford Londonキャンパスにてソフトウェア工学の理学修士号を取得。複数のソフトウェア開発技術にまたがるハイブリッド的な視野を持って開発に臨み、主にMicrosoftおよびSunプラットフォームのサーバーサイドプログラミングを専門とする。ここ5年間はASPおよびJavaの開発者として活躍。コンピュータ工学の理学士号とSun Java-II Certification(SCJP-II)の資格を持つ。ブログのURLはwww.axisebusiness.com/adnano。電子メールアドレスはamasood@bcs.org.uk。
新着ニュース・コラム ホワイトペーパー
|
注目のトピックス 話題の記事
企業の約4割がいまでも IE 6 以前のブラウザを利用 ― Web 広告研究会調査
SNS「非モテ+」、バレンタイン関連ワード投稿を禁止に
Android アプリを美しくみせる UI デザイン10のヒント
新聞広告が動く!--11日の読売新聞朝刊に、AR を応用したドコモなどの広告
イギリス人は年間11キロのチョコを食べている―トリップアドバイザー「世界のチョコレート消費量」を公開
⇒一覧を見る
アクセスランキング
最新コラム一覧
|
||||||||||||||||||||