ホームページ  >  記事  >  Java  >  Java で http データの取得を実装するいくつかの方法

Java で http データの取得を実装するいくつかの方法

PHPz
PHPzオリジナル
2017-05-01 11:30:381840ブラウズ

前書き:

現在、インターネットの第一波は去り、それに伴い数千のデータに基づくモノのインターネット時代が到来しており、データは企業の重要な戦略的リソースの 1 つとなっています。この記事では、データ キャプチャ テクノロジに基づいて、Java 関連のキャプチャ ツールを紹介し、興味のある友人がテストできるデモ ソース コードを添付します。

1) JDKにはHTTP接続が付属しており、ページまたはJsonを取得します

2) JDKにはURL接続が付属しており、ページまたはJsonを取得します

3) HttpClient Getツール、ページの取得または Json

4) commons-io ツール、ページまたは Json

5) Jsoup ツール (通常は HTML フィールドの解析に使用されます)、ページの取得、非Json 戻り形式】


完全なコード:

package com.yeezhao.common.http;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.io.IOUtils;import org.jsoup.Jsoup;/**
 * http工具对比
 * 
 * @author Administrator -> junhong
 *
 *         2016年12月27日 */public class HttpFetchUtil {    
    /**
     * 获取访问的状态码
     * @param request
     * @return
     * @throws Exception     */
    public static int getResponseCode(String request) throws Exception {
        URL url = new URL(request);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        return conn.getResponseCode();

    }    /**
     * 1)JDK自带HTTP连接,获取页面或Json
     * @param request
     * @param charset
     * @return
     * @throws Exception     */
    public static String JDKFetch(String request, String charset) throws Exception {
        URL url = new URL(request);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        //模拟浏览器参数
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36"
                + " (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream input = conn.getInputStream();
            StringBuffer sb = new StringBuffer();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input, charset));
            String s;            while ((s = reader.readLine()) != null) {
                sb.append(s + "\n");
            }
            input.close();
            conn.disconnect();            return sb.toString();
        }        return "";
    }    /**
     * 2) JDK自带URL连接,获取页面或Json
     * @param request
     * @param charset
     * @return
     * @throws Exception     */
    public static String URLFetch(String request, String charset) throws Exception {
        URL url = new URL(request);        return IOUtils.toString(url.openStream());
    }    /**
     * 3)HttpClient Get工具,获取页面或Json
     * @param url
     * @param charset
     * @return
     * @throws Exception     */
    public static String httpClientFetch(String url, String charset) throws Exception {        // GET
        HttpClient httpClient = new HttpClient();
        httpClient.getParams().setContentCharset(charset);
        HttpMethod method = new GetMethod(url);
        httpClient.executeMethod(method);        return method.getResponseBodyAsString();
    }    /**
     * 4)commons-io工具,获取页面或Json
     * @param url
     * @param charset
     * @return
     * @throws Exception     */
    public static String commonsIOFetch(String url, String charset) throws Exception {        return IOUtils.toString(new URL(url), charset);
    }    
    /**
     * 5) Jsoup工具(通常用于html字段解析),获取页面,非Json返回格式
     * @param url
     * @return
     * @throws Exception     */
    public static String jsoupFetch(String url) throws Exception {        return Jsoup.parse(new URL(url), 2 * 1000).html();
    }

}

Java で http データの取得を実装するいくつかの方法

 

测试代码:

package com.yeezhao.common.http;import org.junit.After;import org.junit.Before;import org.junit.Test;/**
 * 测试类
 * 3个测试链接:
 * 1)百科网页
 * 2)浏览器模拟获取接口数据
 * 3)获取普通接口数据
 * @author Administrator -> junhong
 *
 * 2016年12月27日 */public class HttpFetchUtilTest {
    String seeds[] = {"http://baike.baidu.com/view/1.htm","http://m.ximalaya.com/tracks/26096131.json","http://remyapi.yeezhao.com/api/query?wd=%E5%91%A8%E6%98%9F%E9%A9%B0%E7%9A%84%E7%94%B5%E5%BD%B1"};    final static String DEFAULT_CHARSET = "UTF-8";
    @Before    public void setUp() throws Exception {
    }

    @After    public void tearDown() throws Exception {
        System.out.println("--- down ---");
    }

    @Test    public void testGetResponseCode() throws Exception{        for(String seed:seeds){            int responseCode = HttpFetchUtil.getResponseCode(seed);
            System.out.println("ret="+responseCode);
        }
    }

    @Test    public void testJDKFetch() throws Exception{        for(String seed:seeds){
            String ret = HttpFetchUtil.JDKFetch(seed, DEFAULT_CHARSET);
            System.out.println("ret="+ret);
        }
    }

    @Test    public void testURLFetch() throws Exception{        for(String seed:seeds){
            String ret = HttpFetchUtil.URLFetch(seed, DEFAULT_CHARSET);
            System.out.println("ret="+ret);
        }
    }

    @Test    public void testHttpClientFetch()throws Exception {        for(String seed:seeds){
            String ret = HttpFetchUtil.httpClientFetch(seed, DEFAULT_CHARSET);
            System.out.println("ret="+ret);
        }
    }

    @Test    public void testCommonsIOFetch()throws Exception {        for(String seed:seeds){
            String ret = HttpFetchUtil.commonsIOFetch(seed, DEFAULT_CHARSET);
            System.out.println("ret="+ret);
        }
    }

    @Test    public void testJsoupFetch() throws Exception{        for(String seed:seeds){
            String ret = HttpFetchUtil.jsoupFetch(seed);
            System.out.println("ret="+ret);
        }
    }

}

Java で http データの取得を実装するいくつかの方法

 

 

附:相关jar依赖

...<dependency>
<groupid>org.jsoup</groupid>
<artifactid>jsoup</artifactid>
<version>1.7.3</version>
</dependency>

<dependency>
<groupid>commons-httpclient</groupid>
<artifactid>commons-httpclient</artifactid>
<version>3.1</version>
</dependency>

<dependency>
<groupid>commons-io</groupid>
<artifactid>commons-io</artifactid>
<version>2.4</version>
</dependency>...

Java で http データの取得を実装するいくつかの方法

 

后语:
  现在的数据时代,有着"数据即财富"的理念。因此,数据抓取技术将一直发展更新,基于此后续还将扩充针对POST方法的抓取方式,敬请期待!

以上がJava で http データの取得を実装するいくつかの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。