自分の管理下にない外部サイトのフォームにデータを投稿する必要があります。ユーザーが 1 つの場所にデータを入力してから、各フォームを個別に入力するのではなく、同様のフォームを収容する複数の外部サイトに投稿できるようにするツールを構築しています。
基本的に、ワークフローは次のようになります。
- ユーザーがマイページの包括的なフォームに記入する
- このデータは私のデータベースに保存されます
- ユーザーは、外部フォームへのリンクを含むサンキュー ページにリダイレクトされます
- リンクのいずれかがクリックされると、新しいウィンドウが開き、フォームのフィールドが部分的に一致し、フォームのフィールドが一致する必要があります
この最後のステップはハックなものです。私は外部フォームが適切にコーディングされていることに依存しているので、不十分なデータ (キャプチャやその他の必須フィールドがいくつか欠落している) でフォームに投稿すると、フォームに組み込まれた投稿データでそのページがリロードされることを期待しています。データが欠落しているフィールドがマークされています。このようにして、ユーザーは不足しているデータのみ (理想的にはキャプチャのみ) を入力することができ、同じデータを再入力するためにさらに 1 時間費やす必要がなくなります。
これは、curl post を実行してもうまくいかないことを意味するため、次の JS アプローチを採用しました。
function repostForm(id, url) {
var map = fieldMap[id]; // this is map between my field names and external form field names
// construct form
var form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', url);
form.setAttribute('target', '_blank');
for (i=0; i<map.length; i++) {
var input = document.createElement('input');
input.setAttribute('name', map[i].external);
input.setAttribute('value', submissionData[map[i].local]);
form.appendChild(input);
}
document.body.appendChild(form);
form.submit();
}
このコードは正常に実行され、データが外部フォームに投稿されていることがわかります。ただし、一部のフィールドが欠落している部分的に入力されたフォームを表示する代わりに、空白のフォームが表示されます。
今のところ2つの異なるフォームでこれを試しましたが、どちらもそのように機能します。
これらのフォームに追加のセキュリティ チェック (HTTP リファラー フィールドのチェックなど) が含まれているのは運が悪いのでしょうか、それともより基本的なレベルで何かが欠けているのでしょうか? 情報が機密である可能性があるため、これらのフォームへのリンクを送信することはできません。したがって、この基本的なアイデアが機能するかどうか、理想的なケースでは、すべてが適切に適合するかどうか、または根本的な欠陥があるかどうかに興味があります。
エッジケースが割り当てられることはわかっており、原則としてのみ関心があります。
事前に感謝します