__doPostBack()
確かにASP.NETのものです。関数の機能は次のとおりです。
var theForm = document.forms['FORMNAME'];
if (!theForm) {
theForm = document.FORMNAME;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
基本的に、2 つの非表示フィールド (__EVENTTARGET
および__EVENTARGUMENT
) の値をそれぞれのパラメーターの値に設定します。次に、フォームを送信します。
必要に応じて、引き続き PHP HTML パーサーを使用して作業を行うこともできますが、これらの__doPostBack()
リンクのいずれかに遭遇した場合は、手動で POST 要求を作成する必要があります。大まかに言うと、次のようになります。
- 現在のフォーム値を取得します。おそらく、各
input
要素などをループして、値を配列に追加する必要があります。ページにテキスト ボックス、チェックボックスなどがない場合は、.NET がデフォルトで埋め込む非表示フィールド ( 、 など) のみを残す必要があり__VIEWSTATE
ます__EVENTVALIDATION
。
- に渡された値を解析し、
doPostBack()
および の既存の値を上書きし__EVENTTARGET
ます__EVENTARGUMENT
。
- POST リクエストを作成します。あなたが見ているライブラリがこの方法を提供するもの (もしあれば) はわかりませんが、PHP からこれを行う一般的な方法は、cURL 拡張機能を使用することです。例については、http://davidwalsh.name/execute-http-post-php-curlを参照してください。
- HTML の結果を取得し、通常どおりライブラリで解析します。
あるいは、同じページに対してほぼ同じリクエストを常に行っている場合は、フォームの解析のいくつかのステップをスキップして、POST リクエストの作成に直接ジャンプすることもできます。
それはそれほど楽しいことではありませんが、この場合はうまくいくでしょう。JSが関係するより複雑なケースに対処する必要がある場合、またはこれを別の方法で処理したい場合は、基本的にブラウザを駆動してこれらを処理するライブラリがあります(前述のとおり)。最初に思いつくのは次の2つです。
他にもオプションはありますが、既存の PHP スクリプトにすばやく簡単に統合できるものは知りません。