Java でHTTP通信を行う
前回は,AndroidアプリによりHTTP通信のソースコードを書きました.
java のみの場合はどうなるんだろうと思い調べ,以下のようにすればいいということがわかりました.
そして,上のソースコードを用いて以下の二つを取得するものを作ってみたいと思います.
以下がそのソースコードです.
java のみの場合はどうなるんだろうと思い調べ,以下のようにすればいいということがわかりました.
import java.net.*; import java.io.*; /** * Java HTTP クライアントサンプル - Socket 版 - * */ public class So { public static void main(String[] args){ String host = "ホスト"; int port = 80; String path = "取得したいURL"; Socket socket; BufferedReader reader; BufferedWriter writer; try { socket = new Socket(host, port); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); writer.write("GET " + path + " HTTP/1.0\r\n"); writer.write("Host: " + host + ":" + port + "\r\n"); writer.write("\r\n"); writer.flush(); while (true){ String line = reader.readLine(); if ( line == null ){ break; } System.out.println(line); } reader.close(); writer.close(); socket.close(); } catch (UnknownHostException e){ e.printStackTrace(); } catch (IOException e){ e.printStackTrace(); } } }参考URL:Java で HTTP クライアントを作ってみよう (2)
そして,上のソースコードを用いて以下の二つを取得するものを作ってみたいと思います.
以下がそのソースコードです.
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.imageio.IIOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class Data { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String url = "対象のURL"; try{ // Jsoup により,HTML を取得 Document document = Jsoup.connect(url).get(); // リンクの属性である"a"のものを取得する. Elements atags = document.getElementsByTag("a"); // 正規表現により,文頭に"http"がついているものを判別するように指定 String regex ="^http"; Pattern p = Pattern.compile(regex); // 相対・絶対 html ファイルをそれぞれ5つもってくるためのカウント変数 int i=0; int j=5; for(Element atag:atags){ Matcher m= p.matcher(atag.attr("href")); System.out.println("atag.attr(\"href\"):" + atag.attr("href")); // 絶対パスでの html であった場合,それをファイルにする if(m.find() && i < 5){ try{ File file = new File(i+".html"); FileWriter filewriter =new FileWriter(file); filewriter.write(Jsoup.connect(atag.attr("href")).get().outerHtml()); filewriter.close(); }catch(IIOException e){ System.out.println(e); } i++; // 相対パスの html である場合,対象URLを付加して絶対パスにしてファイルにする }else if(!m.find() && j < 10){ try{ File file = new File(j+".html"); FileWriter filewriter =new FileWriter(file); filewriter.write(Jsoup.connect("対象URL"+atag.attr("href")).get().outerHtml()); filewriter.close(); }catch(IIOException e){ System.out.println(e); } j++; } } } catch (IOException e){ e.printStackTrace(); } } }