
Sora Fujimoto
AI Solutions Architect
発行済み Sep 17, 2026
更新されました Sep 17, 2026 · 最小読み取り

AntiAwsWafTaskを送信し、AWS WAF CAPTCHAの結果を返却できます。result.Solution.Cookieを通じて結果を読み取ってください。GoでのAWS WAF CAPTCHA統合には、2つの別々の責任があります。1つはドキュメント化された結果を解決者に要求すること、もう1つはテスト中のアプリケーションでその結果を正しく使用することです。オフィシャルなSDKはAPIのやり取りを処理しますが、あなたのアプリケーションが完了した試行を受け入れたかどうかを判断することはできません。
このチュートリアルでは、所有されているAWS WAFテストページで使用するCapSolverを使用します。このチュートリアルでは、Goモジュールのインストール、タスクの構築、返されたクッキーの処理、SDKのトランスポート動作の理解に焦点を当てます。このウォークスルーでは、1つのドメインで受け入れられたトークンが他のドメインに適用されるとは仮定していません。
Go SDKは、Solveメソッドの背後でタスクの作成と結果の取得をラップします。APIライブラリはこれらの呼び出しを言語レベルのメソッドにパッケージ化しますが、正しいタスクパラメータとアプリケーションロジックが必要です。
オフィシャルなAWS WAFタスクドキュメントはAntiAwsWafTaskとそのsolution.cookie結果を記述しています。Go SDKはCapSolverResponseとして結果を公開し、そこにはSolutionポインタが含まれます。この違いは重要です: Solveはクッキー文字列を直接返しません。
このチュートリアルで意図されているシーケンスは次の通りです:
AWSはそのトークンをAWS WAFインテリジェントな脅威対策の一部として記述しています。結果を特定の試行に関連する値として扱い、アプリケーションへの永続的なアクセス権としては扱わないでください。
小さなGoモジュールを作成し、この例で使用するSDKバージョンをピン留めします。パッケージはオフィシャルなCapSolver Goリポジトリに公開されています。
mkdir capsolver-aws-waf-example
cd capsolver-aws-waf-example
go mod init capsolver-aws-waf-example
go get github.com/capsolver/capsolver-go@v0.0.0-20251204081438-e4e07af23eae
この例はGo 1.27.1でコンパイルされ、ローカルテストが実行されました。長い依存バージョンは特定のコミットを識別するGoの疑似バージョンです。ピン留めすることでSDKのソースを再現可能にしますが、これは今後のアップストリーム修正を無視する推奨ではありません。
例と共に生成されたgo.modとgo.sumを保持してください。標準のGo依存関係管理ドキュメントはこれらのファイルとバージョン選択について説明しています。SDKをアップグレードする際は、リクエストフィールドとレスポンス処理をカバーするテストを再実行してください。
このインストールはクライアントライブラリを準備するものであり、AWS WAFテストページをプロビジョニングしたり、ソルバーのクレジットを購入したり、プロキシを構成したりするものではありません。これらは実際の解決に必要な別個の前提条件です。
例は環境変数から所有されているページURL、プロキシ文字列、解決用APIキーを読み込みます。
| 変数 | 供給する値 |
|---|---|
OWNED_WAF_URL |
あなたが所有しているまたはテストに認可されているAWS WAFページのURL |
CAPSOLVER_PROXY |
タスクドキュメントに従ったフォーマットされたプロキシ |
CAPSOLVER_API_KEY |
CapSolverアカウント用の解決用APIキー |
これらの変数名は例に属するものであり、追加のAPIタスクフィールドではありません。GoコードはそれらをwebsiteURL、proxy、およびSDKクライアントのApiKeyにマップします。
通常のシークレットマネージャーや開発環境を使用して資格情報を供給してください。実際のキーをコミットされたソースに貼り付けないでください。また、解決キーにコンテンツ管理の資格情報を置き換えないでください。プロキシの資格情報も同様の注意を払って扱ってください。
チャレンジを生成する特定の所有URLを選択してください。一般的なホームページは、別のルートのテストに必要なコンテキストを提供しない可能性があります。テスト設計とアプリケーションセッションおよびネットワーク構成を一貫させ、解決結果をそのリクエストから分離したものとして扱わないでください。
以下のコードをmain.goとして保存してください。そのタスクマップとSolveコールはオフィシャルなSDKとタスク例に従っています。環境チェック、明示的なHTTPSホスト、タイムアウト、および準備完了クッキーのチェックはこの小さなプログラムの追加です。ローカルHTTP FixtureはSDKをテストしました。ライブ解決にはあなたの解決キー、プロキシ、所有ページが必要であり、実施されていません。
package main
import (
"errors"
"fmt"
"log"
"net/http"
"os"
"time"
capsolver_go "github.com/capsolver/capsolver-go"
)
func solveAWS(pageURL, proxy, key string) (*capsolver_go.CapSolverResponse, error) {
if pageURL == "" || proxy == "" || key == "" {
return nil, errors.New("set OWNED_WAF_URL, CAPSOLVER_PROXY and CAPSOLVER_API_KEY")
}
client := capsolver_go.CapSolver{ApiKey: key}
result, err := client.Solve(map[string]any{
"type": "AntiAwsWafTask",
"websiteURL": pageURL,
"proxy": proxy,
})
if err != nil {
return nil, err
}
if result == nil || result.Status != "ready" ||
result.Solution == nil || result.Solution.Cookie == "" {
return nil, errors.New("no ready AWS WAF cookie result")
}
return result, nil
}
func main() {
capsolver_go.ApiHost = "https://api.capsolver.com"
http.DefaultClient.Timeout = 20 * time.Second
result, err := solveAWS(
os.Getenv("OWNED_WAF_URL"),
os.Getenv("CAPSOLVER_PROXY"),
os.Getenv("CAPSOLVER_API_KEY"),
)
if err != nil {
log.Fatal(err)
}
fmt.Println("AWS WAF result status:", result.Status)
// result.Solution.Cookie はこの認証されたテスト試行に属します。
}
ピン留めされたSDKソースでは、デフォルトホストがHTTP URLにフォールバックします。capsolver_go.ApiHostへの明示的な割り当ては、あなたの解決資格情報を含むリクエストを行う前にhttps://api.capsolver.comを選択します。
SDKはGoのデフォルトHTTPクライアントを使用します。したがって、http.DefaultClient.Timeoutを設定することで、このスタンドアロン例のリクエストタイムアウトを適用します。これはプロセス全体のクライアントにも影響を与えるため、SDKをより大きなアプリケーションに埋め込む場合、デフォルトクライアントの他のユーザーへの影響を確認してください。
20秒の値は例の設定であり、サービスの完了保証やタスク全体のデッドラインではありません。SDKは結果を取得する間に複数のHTTPリクエストを行う可能性があります。各リクエストにタイムアウトを設定しても、完全なSolveコールが20秒の操作になるとは限りません。
Go net/httpドキュメントはクライアントタイムアウトの動作を説明しています。ラッパーはコンテキストベースのキャンセルパラメータを公開していません。これは、ここに示されているSDKメソッドがそれを受け入れないためです。
CapSolverボーナスコードを取得してください
自動化予算を即座に増やしましょう!
CapSolverアカウントにチャージする際にボーナスコードCAP26を使用すると、すべてのチャージで5%のボーナスが得られます—制限なし。
CapSolverダッシュボードで今すぐ取得してください
3つの環境設定を提供した後、プログラムを実行してください。このライブコマンドはまだあなたの所有ページで検証が必要です。記録されたテストではローカルHTTP Fixtureが使用されました:
go run .
SDKが準備完了のレスポンスと空でないクッキーを返すと、プログラムはレスポンスのステータスを出力します。この値はresult.Solution.Cookieで利用可能であり、所有テストのアプリケーションフローを継続する部分に渡されます。プログラムは意図的にクッキー自体を出力しません。
solveAWSには3つの異なるチェックがあります。Goエラーはコールを失敗させます。欠落または準備完了でないレスポンスはラッパーの準備完了チェックを失敗させます。nilの解決策または空のクッキーは結果の内容チェックを失敗させます。これにより、ポインタが返されただけで呼び出しコードが続くことは防がれます。
ステータスの出力は成功したアプリケーションのアサーションではありません。テストランナーで、返された値を適切なセッションで使用した後に最終的なチェックを追加してください。ページがまだチャレンジを提示している場合、観測されたステージと関連するプロバイダーのエラー情報を保持し、印刷されたステータスを試行が受け入れられた証拠と誤って扱わないでください。
この例はHTTPクッキージャーやブラウザ自動化レイヤーを実装していません。これらはあなたのアプリケーションがテストセッションをどのように作成および維持するかに依存します。関係のないリクエストに値を適用する推測されたクッキーのドメインやグローバルヘッダーを追加しないでください。
オプショナルなフィールドは、実際のチャレンジコンテキストと現在のタスクドキュメントに必要とされる場合に重要です。AWS WAFタスクガイドには、awsKey、awsIv、awsContext、awsChallengeJSなどのフィールドがドキュメント化された状況で含まれています。
あなたのページとサポートされているタスクタイプに一致するリクエストから始めます。サービスが必要なコンテキストが欠如していると報告した場合、所有ページの現在のチャレンジを確認し、対応するドキュメントに従ってください。JSONが完全に見えるようにするために、すべてのオプショナルフィールドにプレースホルダー値を挿入しないでください。
チャレンジデータは現在の試行に属する必要があります。1つのテストからのページURLを別のページや時間から保存されたチャレンジパラメータと混ぜると、リクエストがより難しくなります。リクエストが文法的に有効であっても、入力が互換性のないコンテキストを説明している可能性があります。
より広範なAWS WAF CAPTCHAガイドはタスクの家族を説明しています。このGo例は、レスポンスエンベロープとHTTP動作の言語固有の処理を追加します。これは、必要なチャレンジ情報は変更されません。
アプリケーションは、それが取得された認証されたテストコンテキストでのみ結果を使用する必要があります。AWSはトークンのドメインとドメインリストをドキュメント化しており、トークンが受け入れられる場所に影響を与えます。
所有されている統合テストでは、ターゲットホストと結果に関連する試行を記録してください。アプリケーション固有のクライアントまたはブラウザレイヤーがその意図されたクッキー範囲を管理するようにしてください。クッキー文字列がクローラーやエージェントが訪問するすべてのホストにコピーされるべきだと仮定しないでください。
有用な受け入れチェックは2つの質問に答える必要があります: プロバイダーは期待された結果の形を返しましたか、そしてアプリケーションはその後の操作を受け入れましたか。両方の結果を保持してください。最初の成功と後の失敗の場合、ドメイン、セッション、タイミング、アプリケーションの応答を調査してください。すべての拒否をSDKのトランスポートエラーとラベル付けしないでください。
SDKはAWSアクセスポリシーを実装しておらず、あなたのWeb ACLを変更していません。あなたのアプリケーションのWAF構成がリクエスト処理を制御し続けます。
この例は、実際のピン留めされたSDKを使用してローカルHTTP Fixtureで実行されました。テストは出力タスクマップ、直接の準備完了レスポンス、作成後にポーリングするレスポンス、プロバイダーのエラー、不正なJSON、クッキーの欠如、設定の欠如をチェックしました。
このテスト範囲はライブ解決よりも狭いです。 Fixtureは独自のクッキー値を提供し、実際のAWS WAFページは受け入れていません。テストはGoラッパーがインストールされたSDKとこれらのレスポンス形式を処理することを確立しています。これらはライブサービスの互換性や解決成功確率を確立するものではありません。
クライアントを拡張する際の1つのソースの詳細に注意を払う必要があります: ピン留めされたSDKはClientKeyを使用して資格情報をシリアライズし、RESTの例ではclientKeyが表示されます。ローカル FixtureはSDKが実際に送信するものを記録しています。これはライブエンドポイントが受け入れるキャッピングを証明するものではありません。実際のリクエストを診断する際にはこの区別を明確にしておき、SDKの内部構造を変更する前に上流のサポートを参照してください。
最初のライブチェックでは、単一の代表的な所有ページ、有効な解決キー、およびドキュメント化されたプロキシ設定を使用してください。返されたクッキーと最終的なアプリケーションの結果を確認してください。CapSolverでそのタスク固有のチェックを試してください。その後、他のページへの統合を拡張してください。
Q: 正しいGoインポートパスは何ですか?
github.com/capsolver/capsolver-goを使用してください。この例では、それにはローカルエイリアスcapsolver_goが割り当てられ、インストールコマンドに表示されている依存関係バージョンがピン留めされています。
Q: SolveはAWS WAFクッキーを直接返しますか?
いいえ。レスポンスエンベロープを返します。エラー、レスポンスステータス、および解決策を確認した後、result.Solution.Cookieを通じてクッキーにアクセスしてください。
Q: なぜAPIホストを明示的に設定する必要がありますか?
ピン留めされたSDKソースにはHTTPフォールバックホストがあります。この例では、資格情報を送信する前にHTTPS APIエンドポイントを選択します。依存関係バージョンを変更する際にはこの動作を再確認してください。
Q: HTTPタイムアウトは完全な解決のデッドラインですか?
いいえ。SDKは結果を取得する間に複数のリクエストを発行する可能性があります。各リクエストのタイムアウトは、全体の操作に同じ制限を課すものではなく、リモートキャンセルを確立するものではありません。
Q: これはライブのAWS WAFページでテストされましたか?
いいえ。Goコードは実際のSDKを使用してローカルHTTP Fixtureで実行されました。ライブ解決キーと所有されているAWS WAFテストページが必要であり、サービスの動作とアプリケーションの受け入れを検証する必要があります。

Sora Fujimoto
AI Solutions Architect
Connecting agents, browsers, and APIs into one workflow.
著者について
認可されたAWS WAF LangChainワークフローをCapSolverツール、応答検出、ポリシーゲート、セッション処理、リトライ、および検証を用いて構築してください。

ブラウザオートメーションにおけるAmazon AWS WAF CAPTCHAチャレンジの解決をエキスパートの戦略でマスターしましょう。CapSolverを統合して、スムーズで効率的なオートメーションワークフローを学びます。このガイドはトークンベースおよび分類ベースのソリューションをカバーしています。
