JAVA发送HTTP请求的四种方式总结

时间:2021-08-05 09:19:53

源代码:http://github.com/lovewenyo/HttpDemo

1. HttpURLConnection

使用JDK原生提供的net,无需其他jar包;

HttpURLConnection是URLConnection的子类,提供更多的方法,使用更方便。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package httpURLConnection;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import java.net.HttpURLConnection;
import java.net.URL;
 
public class HttpURLConnectionHelper {
 
 public static String sendRequest(String urlParam,String requestType) {
 
  HttpURLConnection con = null;
 
  BufferedReader buffer = null;
  StringBuffer resultBuffer = null;
 
  try {
   URL url = new URL(urlParam);
   //得到连接对象
   con = (HttpURLConnection) url.openConnection();
   //设置请求类型
   con.setRequestMethod(requestType);
   //设置请求需要返回的数据类型和字符集类型
   con.setRequestProperty("Content-Type", "application/json;charset=GBK");
   //允许写出
   con.setDoOutput(true);
   //允许读入
   con.setDoInput(true);
   //不使用缓存
   con.setUseCaches(false);
   //得到响应码
   int responseCode = con.getResponseCode();
 
   if(responseCode == HttpURLConnection.HTTP_OK){
    //得到响应流
    InputStream inputStream = con.getInputStream();
    //将响应流转换成字符串
    resultBuffer = new StringBuffer();
    String line;
    buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
    while ((line = buffer.readLine()) != null) {
     resultBuffer.append(line);
    }
    return resultBuffer.toString();
   }
 
  }catch(Exception e) {
   e.printStackTrace();
  }
  return "";
 }
 public static void main(String[] args) {
 
  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
  System.out.println(sendRequest(url,"POST"));
 }
}

2. URLConnection

使用JDK原生提供的net,无需其他jar包;

建议使用HttpURLConnection

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package uRLConnection;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
 
public class URLConnectionHelper {
 
 public static String sendRequest(String urlParam) {
 
  URLConnection con = null;
 
  BufferedReader buffer = null;
  StringBuffer resultBuffer = null;
 
  try {
    URL url = new URL(urlParam);
    con = url.openConnection();
 
   //设置请求需要返回的数据类型和字符集类型
   con.setRequestProperty("Content-Type", "application/json;charset=GBK");
   //允许写出
   con.setDoOutput(true);
   //允许读入
   con.setDoInput(true);
   //不使用缓存
   con.setUseCaches(false);
   //得到响应流
   InputStream inputStream = con.getInputStream();
   //将响应流转换成字符串
   resultBuffer = new StringBuffer();
   String line;
   buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
   while ((line = buffer.readLine()) != null) {
    resultBuffer.append(line);
   }
   return resultBuffer.toString();
 
  }catch(Exception e) {
   e.printStackTrace();
  }
 
  return "";
 }
 public static void main(String[] args) {
  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
  System.out.println(sendRequest(url));
 }
}

3. HttpClient

使用方便,我个人偏爱这种方式,但依赖于第三方jar包,相关maven依赖如下:

?
1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient -->
<dependency>
 <groupId>commons-httpclient</groupId>
 <artifactId>commons-httpclient</artifactId>
 <version>3.1</version>
</dependency
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package httpClient;
 
import java.io.IOException;
 
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
 
public class HttpClientHelper {
 public static String sendPost(String urlParam) throws HttpException, IOException {
  // 创建httpClient实例对象
  HttpClient httpClient = new HttpClient();
  // 设置httpClient连接主机服务器超时时间:15000毫秒
  httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
  // 创建post请求方法实例对象
  PostMethod postMethod = new PostMethod(urlParam);
  // 设置post请求超时时间
  postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
  postMethod.addRequestHeader("Content-Type", "application/json");
 
  httpClient.executeMethod(postMethod);
 
  String result = postMethod.getResponseBodyAsString();
  postMethod.releaseConnection();
  return result;
 }
 public static String sendGet(String urlParam) throws HttpException, IOException {
  // 创建httpClient实例对象
  HttpClient httpClient = new HttpClient();
  // 设置httpClient连接主机服务器超时时间:15000毫秒
  httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
  // 创建GET请求方法实例对象
  GetMethod getMethod = new GetMethod(urlParam);
  // 设置post请求超时时间
  getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
  getMethod.addRequestHeader("Content-Type", "application/json");
 
  httpClient.executeMethod(getMethod);
 
  String result = getMethod.getResponseBodyAsString();
  getMethod.releaseConnection();
  return result;
 }
 public static void main(String[] args) throws HttpException, IOException {
  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";
  System.out.println(sendPost(url));
  System.out.println(sendGet(url));
 }
}

4. Socket

使用JDK原生提供的net,无需其他jar包;

使用起来有点麻烦。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package socket;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.URLEncoder;
 
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
 
public class SocketForHttpTest {
 
 private int port;
 private String host;
 private Socket socket;
 private BufferedReader bufferedReader;
 private BufferedWriter bufferedWriter;
 
 public SocketForHttpTest(String host,int port) throws Exception{
 
  this.host = host;
  this.port = port;
 
  /**
   * http协议
   */
  // socket = new Socket(this.host, this.port);
 
  /**
   * https协议
   */
  socket = (SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(this.host, this.port);
 
 
 }
 
 public void sendGet() throws IOException{
  //String requestUrlPath = "/z69183787/article/details/17580325";
  String requestUrlPath = "/";  
 
  OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream());
  bufferedWriter = new BufferedWriter(streamWriter);   
  bufferedWriter.write("GET " + requestUrlPath + " HTTP/1.1\r\n");
  bufferedWriter.write("Host: " + this.host + "\r\n");
  bufferedWriter.write("\r\n");
  bufferedWriter.flush();
 
  BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());
  bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));
  String line = null;
  while((line = bufferedReader.readLine())!= null){
   System.out.println(line);
  }
  bufferedReader.close();
  bufferedWriter.close();
  socket.close();
 
 }
 
 
 public void sendPost() throws IOException{
   String path = "/";
   String data = URLEncoder.encode("name", "utf-8") + "=" + URLEncoder.encode("张三", "utf-8") + "&" +
      URLEncoder.encode("age", "utf-8") + "=" + URLEncoder.encode("32", "utf-8");
   // String data = "name=zhigang_jia";
   System.out.println(">>>>>>>>>>>>>>>>>>>>>"+data);   
   OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream(), "utf-8");
   bufferedWriter = new BufferedWriter(streamWriter);    
   bufferedWriter.write("POST " + path + " HTTP/1.1\r\n");
   bufferedWriter.write("Host: " + this.host + "\r\n");
   bufferedWriter.write("Content-Length: " + data.length() + "\r\n");
   bufferedWriter.write("Content-Type: application/x-www-form-urlencoded\r\n");
   bufferedWriter.write("\r\n");
   bufferedWriter.write(data);
 
   bufferedWriter.write("\r\n");
   bufferedWriter.flush();
 
   BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());
   bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));
   String line = null;
   while((line = bufferedReader.readLine())!= null)
   {
    System.out.println(line);
   }
   bufferedReader.close();
   bufferedWriter.close();
   socket.close();
 }
 
 public static void main(String[] args) throws Exception {
  /**
   * http协议测试
   */
  //SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 80);
  /**
   * https协议测试
   */
  SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 443);
  try {
   forHttpTest.sendGet();
  // forHttpTest.sendPost();
  } catch (IOException e) {
 
   e.printStackTrace();
  }
 }
 
}

总结

到此这篇关于JAVA发送HTTP请求的文章就介绍到这了,更多相关JAVA发送HTTP请求内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/longshehe9319/article/details/80509829