##背景
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>
・・・省略・・・
以上です。