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(" ", " ");
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(" ", " ");
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 请求模拟