POST
日本語 | 掲示 |
英語 | post |
ふりがな | ぽすと |
フリガナ | ポスト |
ホームページに情報を送信するためのHTTPメソッド。
HTTPを用いて、特定のURLに対して文字列や画像を送信し、その結果としてホームページや画像等を取得するために、リクエストとして送信するHTTPメソッド。
"POST http://www.atmarkit.co.jp/misc/search/search.php HTTP/2.0"のような形式でソケットを用いて送信することで、情報を取得することができる。
送信する情報は「本文」として送信する。日本語を渡す場合にはURLEncoderクラスのencode()メソッドで適切な形式に変換する必要がある。ただしその形式は送信先によって異なる。
ホームページから送信する場合には、<FORM>タグを使用して入力フォームを形成し、<INPUT>タグを使用して入力用テキストボックスや送信ボタンを表示する。この送信ボタンが押された際に、各入力値が送信される。
通常、Webブラウザの「アドレス」欄から直接POSTすることはできない。
だが、それは「アドレス欄からできない」というだけで、上記のようにソケットを使用した例を含めて、いくらでも「好きな情報をPOSTする」ことができるため、Webアプリケーションは、フォームの形式に関わらず、あらゆる形式で情報が送られてくることを想定しなければならない。
それを怠った場合、セキュリティホールとなる可能性がある。
また、サーブレットでこのHTTPメソッドを受け取った場合、doPost()メソッドが呼ばれる。
「情報の送信」はGETでも行えるが、その場合リクエストパラメーターとして渡す必要がある。
リクエストパラメーターとして渡すと、文字列の長さに制限があるため大きなデータを送信することができず、また、送信したリクエストパラメーターがWebブラウザの「アドレス」欄に表示されてしまうため、セキュリティ的にも問題となる。
そのため、情報を送信する場合には通常POSTを使用することになる。
HTTPを用いて、特定のURLに対して文字列や画像を送信し、その結果としてホームページや画像等を取得するために、リクエストとして送信するHTTPメソッド。
"POST http://www.atmarkit.co.jp/misc/search/search.php HTTP/2.0"のような形式でソケットを用いて送信することで、情報を取得することができる。
送信する情報は「本文」として送信する。日本語を渡す場合にはURLEncoderクラスのencode()メソッドで適切な形式に変換する必要がある。ただしその形式は送信先によって異なる。
ホームページから送信する場合には、<FORM>タグを使用して入力フォームを形成し、<INPUT>タグを使用して入力用テキストボックスや送信ボタンを表示する。この送信ボタンが押された際に、各入力値が送信される。
通常、Webブラウザの「アドレス」欄から直接POSTすることはできない。
だが、それは「アドレス欄からできない」というだけで、上記のようにソケットを使用した例を含めて、いくらでも「好きな情報をPOSTする」ことができるため、Webアプリケーションは、フォームの形式に関わらず、あらゆる形式で情報が送られてくることを想定しなければならない。
それを怠った場合、セキュリティホールとなる可能性がある。
また、サーブレットでこのHTTPメソッドを受け取った場合、doPost()メソッドが呼ばれる。
「情報の送信」はGETでも行えるが、その場合リクエストパラメーターとして渡す必要がある。
リクエストパラメーターとして渡すと、文字列の長さに制限があるため大きなデータを送信することができず、また、送信したリクエストパラメーターがWebブラウザの「アドレス」欄に表示されてしまうため、セキュリティ的にも問題となる。
そのため、情報を送信する場合には通常POSTを使用することになる。
// Sample.java
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Sample
{
public static void main( String[] args )
{
// 接続先のホスト名(URLではありません)。
String host = "www.atmarkit.co.jp";
// 接続時のポート番号。
int port = 80;
// Content-Typeの文字コード(注:実際には、送信元ページの文字コードを元に指定します)。
String charSet = "EUC-JP";
// リクエストのメソッド。
String method = "POST";
// リクエストURL。
String url = "/misc/search/search.php";
// リクエストのプロトコル。
String protocol = "HTTP/1.1";
// 「Host」リクエストヘッダー。
String hostHeader = "Host:";
// 「Content-Length」リクエストヘッダー。
String contentLengthHeader = "Content-Length: ";
// 「Content-Type」リクエストヘッダー。
String contentTypeHeader = "Content-Type: application/x-www-form-urlencoded";
// 送信するリクエストパラメーター。
String param0 = "query=Java";
// ソケットクラス。
Socket socket = null;
// ホームページを取得するためのストリームクラス。
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
// 接続情報を送るためのストリームクラス。
OutputStreamWriter outputStreamWriter = null;
BufferedWriter bufferedWriter = null;
PrintWriter printWriter = null;
try
{
// 接続します。
socket = new Socket( host, port );
// ホームページ取得用ストリームクラスを準備します。
inputStreamReader = new InputStreamReader( socket.getInputStream(), charSet );
bufferedReader = new BufferedReader( inputStreamReader );
// リクエスト送信用ストリームクラスを準備します。
outputStreamWriter = new OutputStreamWriter( socket.getOutputStream() );
bufferedWriter = new BufferedWriter( outputStreamWriter );
printWriter = new PrintWriter( bufferedWriter );
// リクエストを送信します。
System.out.println( method + " " + url + " " + protocol );
System.out.println( hostHeader + host );
System.out.println( contentTypeHeader );
System.out.println( contentLengthHeader + param0.length() );
System.out.println();
System.out.println( param0 );
System.out.println();
System.out.flush();
// POST /misc/search/search.php HTTP/1.1
// Host:www.atmarkit.co.jp
// Content-Type: application/x-www-form-urlencoded
// Content-Length: 10
// (改行のみ)
// query=Java
// (改行のみ)
// 注:送信するパラメーターは「本文」に当たるので、
// リクエストヘッダーの間に空行を挟みます。
// また、日本語を渡す場合にはURLEncoderクラスのencode()メソッドで
// 特別な形にエンコードする必要があります。ただし、その形式は送る
// 相手で異なります。
printWriter.println( method + " " + url + " " + protocol );
printWriter.println( hostHeader + host );
printWriter.println( contentTypeHeader );
printWriter.println( contentLengthHeader + param0.length() );
printWriter.println();
printWriter.println( param0 );
printWriter.println();
printWriter.flush();
// ホームページの情報を取得します。
String line = null;
do
{
line = bufferedReader.readLine();
if( line != null )
{
System.out.println( line );
}
}
while( line != null );
//HTTP/1.1 200 OK
//Date: Thu, 25 Aug 2005 13:04:46 GMT
//Server: Apache/1.3.28 (Unix) tomcat/1.0 mod_ssl/2.8.15 OpenSSL/0.9.7c PHP/4.3.10
//Set-Cookie: Apache=219.117.192.192.292101124975086913; path=/; expires=Wed, 20-Aug-25 13:04:46 GMT
//P3P: CP="CAO DSP COR CURa ADMa DEVa OUR IND NAV "
//X-Powered-By: PHP/4.3.10
//Cache-Control: private
//Transfer-Encoding: chunked
//Content-Type: text/html; charset=EUC-JP
//
//d23
//<HTML lang="ja">
//<HEAD>
//<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
//<TITLE>@IT総合検索 - 「Java」の検索結果</TITLE><link rel="stylesheet" href="/stylesheet/article.css" type="text/css">
// (以下略)
}
catch( UnknownHostException e )
{
e.printStackTrace();
}
catch( IOException e )
{
e.printStackTrace();
}
finally
{
// ストリーム及びソケットを閉じます。
if( printWriter != null )
{
printWriter.close();
}
try
{
if( bufferedWriter != null )
{
bufferedWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( outputStreamWriter != null )
{
outputStreamWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( bufferedReader != null )
{
bufferedReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( inputStreamReader != null )
{
inputStreamReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( socket != null )
{
socket.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
}
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Sample
{
public static void main( String[] args )
{
// 接続先のホスト名(URLではありません)。
String host = "www.atmarkit.co.jp";
// 接続時のポート番号。
int port = 80;
// Content-Typeの文字コード(注:実際には、送信元ページの文字コードを元に指定します)。
String charSet = "EUC-JP";
// リクエストのメソッド。
String method = "POST";
// リクエストURL。
String url = "/misc/search/search.php";
// リクエストのプロトコル。
String protocol = "HTTP/1.1";
// 「Host」リクエストヘッダー。
String hostHeader = "Host:";
// 「Content-Length」リクエストヘッダー。
String contentLengthHeader = "Content-Length: ";
// 「Content-Type」リクエストヘッダー。
String contentTypeHeader = "Content-Type: application/x-www-form-urlencoded";
// 送信するリクエストパラメーター。
String param0 = "query=Java";
// ソケットクラス。
Socket socket = null;
// ホームページを取得するためのストリームクラス。
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
// 接続情報を送るためのストリームクラス。
OutputStreamWriter outputStreamWriter = null;
BufferedWriter bufferedWriter = null;
PrintWriter printWriter = null;
try
{
// 接続します。
socket = new Socket( host, port );
// ホームページ取得用ストリームクラスを準備します。
inputStreamReader = new InputStreamReader( socket.getInputStream(), charSet );
bufferedReader = new BufferedReader( inputStreamReader );
// リクエスト送信用ストリームクラスを準備します。
outputStreamWriter = new OutputStreamWriter( socket.getOutputStream() );
bufferedWriter = new BufferedWriter( outputStreamWriter );
printWriter = new PrintWriter( bufferedWriter );
// リクエストを送信します。
System.out.println( method + " " + url + " " + protocol );
System.out.println( hostHeader + host );
System.out.println( contentTypeHeader );
System.out.println( contentLengthHeader + param0.length() );
System.out.println();
System.out.println( param0 );
System.out.println();
System.out.flush();
// POST /misc/search/search.php HTTP/1.1
// Host:www.atmarkit.co.jp
// Content-Type: application/x-www-form-urlencoded
// Content-Length: 10
// (改行のみ)
// query=Java
// (改行のみ)
// 注:送信するパラメーターは「本文」に当たるので、
// リクエストヘッダーの間に空行を挟みます。
// また、日本語を渡す場合にはURLEncoderクラスのencode()メソッドで
// 特別な形にエンコードする必要があります。ただし、その形式は送る
// 相手で異なります。
printWriter.println( method + " " + url + " " + protocol );
printWriter.println( hostHeader + host );
printWriter.println( contentTypeHeader );
printWriter.println( contentLengthHeader + param0.length() );
printWriter.println();
printWriter.println( param0 );
printWriter.println();
printWriter.flush();
// ホームページの情報を取得します。
String line = null;
do
{
line = bufferedReader.readLine();
if( line != null )
{
System.out.println( line );
}
}
while( line != null );
//HTTP/1.1 200 OK
//Date: Thu, 25 Aug 2005 13:04:46 GMT
//Server: Apache/1.3.28 (Unix) tomcat/1.0 mod_ssl/2.8.15 OpenSSL/0.9.7c PHP/4.3.10
//Set-Cookie: Apache=219.117.192.192.292101124975086913; path=/; expires=Wed, 20-Aug-25 13:04:46 GMT
//P3P: CP="CAO DSP COR CURa ADMa DEVa OUR IND NAV "
//X-Powered-By: PHP/4.3.10
//Cache-Control: private
//Transfer-Encoding: chunked
//Content-Type: text/html; charset=EUC-JP
//
//d23
//<HTML lang="ja">
//<HEAD>
//<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
//<TITLE>@IT総合検索 - 「Java」の検索結果</TITLE><link rel="stylesheet" href="/stylesheet/article.css" type="text/css">
// (以下略)
}
catch( UnknownHostException e )
{
e.printStackTrace();
}
catch( IOException e )
{
e.printStackTrace();
}
finally
{
// ストリーム及びソケットを閉じます。
if( printWriter != null )
{
printWriter.close();
}
try
{
if( bufferedWriter != null )
{
bufferedWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( outputStreamWriter != null )
{
outputStreamWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( bufferedReader != null )
{
bufferedReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( inputStreamReader != null )
{
inputStreamReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( socket != null )
{
socket.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
}
// Sample.java import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.OutputStreamWriter; import java.io.BufferedWriter; import java.io.PrintWriter; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Sample { public static void main( String[] args ) { // 接続先のホスト名(URLではありません)。 String host = "www.atmarkit.co.jp"; // 接続時のポート番号。 int port = 80; // Content-Typeの文字コード(注:実際には、送信元ページの文字コードを元に指定します)。 String charSet = "EUC-JP"; // リクエストのメソッド。 String method = "POST"; // リクエストURL。 String url = "/misc/search/search.php"; // リクエストのプロトコル。 String protocol = "HTTP/1.1"; // 「Host」リクエストヘッダー。 String hostHeader = "Host:"; // 「Content-Length」リクエストヘッダー。 String contentLengthHeader = "Content-Length: "; // 「Content-Type」リクエストヘッダー。 String contentTypeHeader = "Content-Type: application/x-www-form-urlencoded"; // 送信するリクエストパラメーター。 String param0 = "query=Java"; // ソケットクラス。 Socket socket = null; // ホームページを取得するためのストリームクラス。 InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; // 接続情報を送るためのストリームクラス。 OutputStreamWriter outputStreamWriter = null; BufferedWriter bufferedWriter = null; PrintWriter printWriter = null; try { // 接続します。 socket = new Socket( host, port ); // ホームページ取得用ストリームクラスを準備します。 inputStreamReader = new InputStreamReader( socket.getInputStream(), charSet ); bufferedReader = new BufferedReader( inputStreamReader ); // リクエスト送信用ストリームクラスを準備します。 outputStreamWriter = new OutputStreamWriter( socket.getOutputStream() ); bufferedWriter = new BufferedWriter( outputStreamWriter ); printWriter = new PrintWriter( bufferedWriter ); // リクエストを送信します。 System.out.println( method + " " + url + " " + protocol ); System.out.println( hostHeader + host ); System.out.println( contentTypeHeader ); System.out.println( contentLengthHeader + param0.length() ); System.out.println(); System.out.println( param0 ); System.out.println(); System.out.flush(); // POST /misc/search/search.php HTTP/1.1 // Host:www.atmarkit.co.jp // Content-Type: application/x-www-form-urlencoded // Content-Length: 10 // (改行のみ) // query=Java // (改行のみ) // 注:送信するパラメーターは「本文」に当たるので、 // リクエストヘッダーの間に空行を挟みます。 // また、日本語を渡す場合にはURLEncoderクラスのencode()メソッドで // 特別な形にエンコードする必要があります。ただし、その形式は送る // 相手で異なります。 printWriter.println( method + " " + url + " " + protocol ); printWriter.println( hostHeader + host ); printWriter.println( contentTypeHeader ); printWriter.println( contentLengthHeader + param0.length() ); printWriter.println(); printWriter.println( param0 ); printWriter.println(); printWriter.flush(); // ホームページの情報を取得します。 String line = null; do { line = bufferedReader.readLine(); if( line != null ) { System.out.println( line ); } } while( line != null ); //HTTP/1.1 200 OK //Date: Thu, 25 Aug 2005 13:04:46 GMT //Server: Apache/1.3.28 (Unix) tomcat/1.0 mod_ssl/2.8.15 OpenSSL/0.9.7c PHP/4.3.10 //Set-Cookie: Apache=219.117.192.192.292101124975086913; path=/; expires=Wed, 20-Aug-25 13:04:46 GMT //P3P: CP="CAO DSP COR CURa ADMa DEVa OUR IND NAV " //X-Powered-By: PHP/4.3.10 //Cache-Control: private //Transfer-Encoding: chunked //Content-Type: text/html; charset=EUC-JP // //d23 //<HTML lang="ja"> //<HEAD> //<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP"> //<TITLE>@IT総合検索 - 「Java」の検索結果</TITLE><link rel="stylesheet" href="/stylesheet/article.css" type="text/css"> // (以下略) } catch( UnknownHostException e ) { e.printStackTrace(); } catch( IOException e ) { e.printStackTrace(); } finally { // ストリーム及びソケットを閉じます。 if( printWriter != null ) { printWriter.close(); } try { if( bufferedWriter != null ) { bufferedWriter.close(); } } catch( IOException e ) { e.printStackTrace(); } try { if( outputStreamWriter != null ) { outputStreamWriter.close(); } } catch( IOException e ) { e.printStackTrace(); } try { if( bufferedReader != null ) { bufferedReader.close(); } } catch( IOException e ) { e.printStackTrace(); } try { if( inputStreamReader != null ) { inputStreamReader.close(); } } catch( IOException e ) { e.printStackTrace(); } try { if( socket != null ) { socket.close(); } } catch( IOException e ) { e.printStackTrace(); } } } }