LoginSignup
1

More than 3 years have passed since last update.

posted at

JavaでPOSTした結果を取得する

背景

JavaからWebサイトにデータをPOSTし、結果を取得したい場合のメモです。
今回はヤマト運輸の荷物問い合わせシステムに伝票番号をPOSTし、問い合わせ結果を取得します。

準備

荷物問い合わせシステムのソースからPOSTするデータのname属性を調べます。

view-source
 <td align="left">詳細情報 
  <input type="radio" name="number00" value="1" checked>あり
  <input type="radio" name="number00" value="2">なし
 </td>
・・・省略・・・
<td class="input">
  <input name="number01" size="20" maxlength="14">
 </td>

ソースから詳細情報を 表示する/表示しない を選択するラジオボタンの名前が number00
伝票番号を入力するテキストボックスの名前が number01 ~ number10 であることが分かります。

問い合わせ結果の取得

以下のコードで取得を行います。

Post.java
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class Post {
    public String getResultPage(String postData, String postURL){
        try{
            String data = postData;
            URL url = new URL(postURL);
            HttpURLConnection uc = (HttpURLConnection)url.openConnection();
            uc.setDoOutput(true); //生成したURL接続からOutputStreamを取得するためのフラグを立てる
            uc.setRequestMethod("POST");
            OutputStream os = uc.getOutputStream();
            os.write(data.getBytes());
            os.flush();
            os.close();
            InputStream is = uc.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"Shift_JIS"));
            String line;
            StringBuffer buf = new StringBuffer();
            while((line = reader.readLine()) != null){
                buf.append(line + "\n");
            }
            is.close();
            uc.disconnect();
            return buf.toString();
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    public static void main(String[] args) {
        String url = "https://toi.kuronekoyamato.co.jp/cgi-bin/tneko";
        String query = "number00=1&number01=伝票番号"; //※データをPOSTする際は name=value&name=value... という形式になる
        System.out.println(new Post().getResultPage(query,url));
    }

}

実行結果

POSTした結果が出力されます

・・・省略・・・
 <table class="meisai">
<tr>
 <th width="55"><br></th>
 <th>荷物状況</th>
 <th> </th>
 <th>時 刻</th>
 <th>担当店名</th>
 <th>担当店コード</th>
</tr>
<tr class="odd">
 <td class="image"><img src="/images/ya_02.gif" alt="経過"></td>
 <td>発送</td>
 <td>02/21</td>
 <td>13:47</td>
 <td><a href="http://sneko2.kuronekoyamato.co.jp/sneko2/Sngp?ID=NET_C&JC=031902&DN=&MD=&F=2" target="_blank">東京法人営業支店</a></td>
 <td>031902</td>
</tr>
<tr class="even">
 <td class="image"><img src="/images/ya_02.gif" alt="経過"></td>
 <td>配達予定</td>
 <td>02/22</td>
 <td>12:30</td>
 <td>最寄りの営業所</td>
 <td>最寄りの営業所のセンターコード</td>
</tr>
<tr class="odd">
 <td class="image"><img src="/images/ya_02.gif" alt="経過"></td>
 <td>配達予定</td>
 <td>02/22</td>
 <td>17:37</td>
 <td>最寄りの営業所</td>
 <td>最寄りの営業所のセンターコード</td>
</tr>
<tr class="even">
 <td class="image"><img src="/images/nimotsu_01.gif" alt="最新"></td>
 <td>配達完了</td>
 <td>02/22</td>
 <td>19:11</td>
 <td><a href="最寄りの営業所へのリンク" target="_blank">最寄りの営業所</a></td>
 <td>最寄りの営業所のセンターコード</td>
</tr>
</table>
・・・省略・・・

以上です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1