Java实现的http协议方式

Java实现的http协议方式

主要有两种方式,
第一种是使用java自带的接口    
java.net.*      
标准的Java接口: HttpURLConnection 是JAVA的标准类

第二种是使用Apache的接口      
httpclient      标准的Apache接口
 httpClient是一个客户端的http通信实现库,HttpClient的目标是发送和接收HTTP报文

http协议

http协议支持的请求方式有  ,分别是

 一个完整的HTTP请求包括如下内容:一个请求行、若干消息头、以及实体内容
请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有: GET、 POST
 其中,http服务器至少要支持的方式有get和post

POST与GET的区别:
1、GET是从服务器上获取数据,POST是向服务器传送数据。
2、在客户端, GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
3、对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数。
4、GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

标准的Java接口实现方法get

//代码规范 逻辑清晰,流程图
//判断条件复用,或者引进新变量,避免多次判断带来效率的下降
//break 注意容错
//步骤,首先是明确需要抓取的内容
//内容的URL方式以及构成逻辑
//对抓取到的内容进行解析
package test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
//import java.util.Scanner;

public class HttpURLConnectionExample {

private final String USER_AGENT = "Mozilla/5.0";
public static void main(String[] args) throws Exception {
    HttpURLConnectionExample http = new HttpURLConnectionExample();
    System.out.println("Testing 1 - Send Http GET request");
    Scanner sc = new Scanner(System.in);
    System.out.println("\n请输入你的手机号码:");
    String telephone = sc.nextLine();
    http.sendGet(telephone);
    sc.close();
}

// HTTP GET request
private void sendGet(String telephone) throws Exception {
    String url_stabale = "http://www.ip138.com:8080/search.asp?mobile=";
    String addstring = "&action=mobile";
    String url = url_stabale+telephone+addstring ;
    System.out.println(url);
    //String url = "http://www.ip138.com:8080/search.asp?mobile=输入你要输入的号码1&action=mobile";
    //步骤:第一步创建HTTP连接对象
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    // 使用 HttpURLConnection 来发送 GET 请求
    con.setRequestMethod("GET");
    ////添加HTTP请求头
    con.setRequestProperty("User-Agent", USER_AGENT);
    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);
    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    //StringBuffer response = new StringBuffer();
    //对要提取的数据进行判断
     CharSequence cs1 = "2\" a";
     CharSequence cs2 = "class=tdc2";
        int i = 0;
    while ((inputLine = in.readLine()) != null) {
        //response.append(inputLine);
        String results = inputLine;
        if(inputLine.contains(cs1)) {
            //提取子串,先判断或者提取Index
            String res = results.substring(results.indexOf("\">")+2,results.indexOf("</")).replace("&nbsp;", " ");
            System.out.println(res);
            break;
        }
        else if(inputLine.contains(cs2)){
            i++;
            if(i==2){
                //提取子串,先判断或者提取Index
                String res = results.substring(results.indexOf("2>")+2,results.indexOf("</")).replace("&nbsp;", " ");
                System.out.println(res);
                break;
            }

        }
    }
    in.close();
    System.out.println("stages are all cleared");
    //print result
    //System.out.println(response.toString());
  }
 }

标准的Java接口实现方法get

package test;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;

import java.net.HttpURLConnection;
import java.net.URL;


public class HttpURLConnectionExample {

private final String USER_AGENT = "Mozilla/5.0";

public static void main(String[] args) throws Exception {

    HttpURLConnectionExample http = new HttpURLConnectionExample();

    System.out.println("\nTesting 2 - Send Http POST request");
    http.sendPost();

}
// HTTP POST request
    private void sendPost() throws Exception {
//HttpURLConnection 提供了一个方法 setDoOutput(true) 来表示有数据要输出给服务端,并可以通过 getOutputStream() 得到输出流
//我们将要写的数据通过这个输出流 POST 到服务端,**********是电话号码
        String url = "http://www.ip138.com:8080/search.asp?";
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        //add reuqest header
        con.setRequestMethod("POST");
        con.setRequestProperty("User-Agent", USER_AGENT);

        String urlParameters = "mobile=**********&action=mobile";

        // Send post request
        con.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(urlParameters);
        wr.flush();
        wr.close();

        int responseCode = con.getResponseCode();
        System.out.println("\nSending 'POST' request to URL : " + url);
        System.out.println("Post parameters : " + urlParameters);
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream()));
        String inputLine;
        //StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            //response.append(inputLine);
            System.out.println(inputLine);
        }
        in.close();

        //print result
        //System.out.println(response.toString());

    }

}

参考:

http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/ How to send HTTP request GET/POST in Java
http://www.tuicool.com/articles/re2eAjE Java 和 HTTP 的那些事(一) 使用 Java 进行 HTTP 请求模拟

blogroll

social