次のようなフォームを Java で送信しようとしています。
<form id="bForm" action="/a/b.php" method="POST"></form>
ありません<input type="hidden">
、まったくありません<input>
。ソースでは、次のような JavaScript コードを実行するリンクをクリックすると、このフォームが送信されることがわかります。
javascript:b(<k>,<v>)
ここで<k>
and<v>
は、いくつかの数字で構成されるキーと値です。
さて、b()
ソースの関数は次のとおりです。
function b(value, key) {
var form = document.getElementById('bForm');
form.action = '/b/user/' + key + '/' + value + '.txt';
form.submit();
}
私が受信しようとしているのは、応答として送信される.txtファイルですが、直接開こうとしています
http://<url>.com/b/user/<key>/<value>.txt
ブラウザで .txt ファイルを取得できませんが、POST メソッドを使用してアクセスする必要があるというメッセージが表示されます。
今、私は POST 経由でリクエストを送信する方法について読んで (ここで解決策を見つけようとしても)、ほとんど理解していると思います。それでも、フォームとは何かを含め、今日はほとんどすべてを読んだだけなので、解決策が明らかな場合はすみません。ここでの問題は、フォームの送信時に実行するアクションを「URL に知らせる」ために渡すことができるパラメーターがないことです。
フォームのアクションを変更することはおそらくできないので、どうすればよいでしょうか? 「POST」経由で .txt ファイルにつながる URL に何らかの方法で「接続」できますか? または、どうにかして JavaScript を実行する必要がありますか?
編集:私は今問題を解決しました.私の説明が十分であるかどうかはわかりませんが、解決策は非常に単純に見えました.フォームについて十分に知りませんでした. したがって、action=#myurl# は、フォームが現在のページではなく #myurl# に送信されることを意味します。また、送信されたフォームに対して何もできないファイルをターゲット URL が指しているように見えますが、これは正しくありません。実際、これはスクリプトを指していますが、URL でダウンロードしたいファイルへのパスしか見えないように、スクリプトは「隠されている」のです。だから、私はこれをやった:
URL url = new URL("http://myurl.com/b/user/" + key + "/" + value + ".txt");
HttpURLConnection c = (HttpURLConnection) url.openConnection();
//set User-Agent, Cookie, etc. properties here
c.setRequestMethod("POST");
c.setInstanceFollowRedirects(false); //not sure if this is needed
InputStream in = c.getInputStream(); //this submits the parameter-less form
//now I can get the response with this stream, i.e. read & save the .txt file
すべてがテストされ、完全なコードを実行しているため、確実に機能します。