クローラーロード01で遭遇したさまざまなピットを記録する
2020.01.12 ---- jsonp
Ajaxから返されたfunc(「暗号化されたデータ」)が復号化関数を見つけられない場合はどうすればよいですか?
jsonpとは
元の「ルーキーチュートリアル」を引用するには:
Jsonp(JSON with Padding)はjsonの「使用モード」であり、これによりWebページは他のドメイン名(Webサイト)から情報を取得できます。つまり、ドメイン間でデータを読み取ることができます。
異なるドメイン(ウェブサイト)のデータにアクセスするために特別なテクノロジー(JSONP)が必要なのはなぜですか?これは同一起源戦略によるものです。
Netscapeによって提案されたよく知られたセキュリティ戦略である同一生成元ポリシーは、JavaScriptをサポートするすべてのブラウザで使用されるようになりました。
jsonpが使用される理由については、それは主題ではありません。スキップしてください。
栗をあげる
以下はクナールのホテルレビューの例です。
リンクを開き、デバッグパネルに入り、ページを更新し、コメントデータを検索して、対応する結果がないことを確認します。
データはどこにありますか?段階的なデバッグの後、データが1?Qan = xxxの要求結果によって生成されていることがわかります。ここで、1はコメントページの数です。
この応答パラメーターは、必要なデータであり、関数名と関数パラメーターで構成されています。最初のパラメーターは、必要なデータの暗号文です。この復号化メソッドの場所をすばやく見つける方法は?
この種の問題を解決する方法
まず、対応するjsを見つけ、jsと入力して、ブレークポイントにヒットします。
ブレークポイントをフォーマットした後、次のページをクリックしてブレークポイントを入力します。
ここには小さな穴があります。ブレークポイントの位置に何回もヒットすることができません。ブレークポイントを入力できないか、ブレークポイントを入力した後で要求が発行されなかったか、戻り結果がまだ取得されていない可能性があります。ajaxリクエストではないため、xhrブレークポイントは役に立ちません。domブレークポイントは大丈夫かもしれませんが、試みませんでした。
ヒント:jqueryファイルを入力し、リクエストを正常に送信した後でコールバック関数を見つけ、コールバック関数の最初の行にブレークポイントを配置します。
ここで、sendリクエストの成功コールバック関数はブレークポイントでマークされているため、成功した各ajaxリクエストはブレークポイントに入ることに注意してください。デバッグ時には、関連するリクエストがネットワークパネルに表示されるかどうかによって異なります。
2?Qan = xxxリクエストが表示されたら、コンソールパネルへの応答で関数名をコピーし、Enterキーを押します。
関数をダブルクリックしてソースパネルに入ります。これが必要な復号化関数です。
まとめ
jsonpはより多くのデータを検出するか、植字のためにWebページにデータを配置しましたが、この種の復号化はそれほど発生しませんでした。