美文网首页JAVA编程技术类
如何在Java中发送HTTP GET/POST请求

如何在Java中发送HTTP GET/POST请求

作者: JellyCai | 来源:发表于2016-12-30 09:56 被阅读8573次

    原文:www.mkyong.com
    在这篇文章中,我们将向你展示两个发送Http的GET/POST的例子通过以下两个APIs

    1.Java原生HttpURLConnection
    2.Apache的HttpClient库

    1.Java原生HttpURLConnection例子

    这个例子使用HttpURLConnection(http)和HttpsURLConnection(https)

    1.发送HTTP GET请求去获取Google.com的搜索结果
    2.发送HTTP POST请求去搜索Apple.com的商品详情

    HttpURLConnectionExample.java
    package com.mkyong;
    
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import javax.net.ssl.HttpsURLConnection;
    
    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");
            http.sendGet();
    
            System.out.println("\nTesting 2 - Send Http POST request");
            http.sendPost();
    
        }
    
        // HTTP GET请求
        private void sendGet() throws Exception {
    
            String url = "http://www.google.com/search?q=mkyong";
    
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    
            //默认值我GET
            con.setRequestMethod("GET");
    
            //添加请求头
            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();
    
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
    
            //打印结果
            System.out.println(response.toString());
    
        }
    
        // HTTP POST请求
        private void sendPost() throws Exception {
    
            String url = "https://selfsolve.apple.com/wcResults.do";
            URL obj = new URL(url);
            HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    
            //添加请求头
            con.setRequestMethod("POST");
            con.setRequestProperty("User-Agent", USER_AGENT);
            con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    
            String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345";
    
            //发送Post请求
            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);
            }
            in.close();
    
            //打印结果
            System.out.println(response.toString());
    
        }
    
    }
    
    输出结果
    Sending 'GET' request to URL : http://www.google.com/search?q=mkyong
    Response Code : 200
    Google search result...
    
    Testing 2 - Send Http POST request
    
    Sending 'POST' request to URL : https://selfsolve.apple.com/wcResults.do
    Post parameters : sn=C02G8416DRJM&cn=&locale=&caller=&num=12345
    Response Code : 200
    Apple product detail...
    

    2.Apache的HttpClient例子

    这里例子和上面的功能相同,但是使用了Apache的HttpClient来发送HTTP的GET/POST请求

    HttpClientExample.java
    package com.mkyong;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    
    public class HttpClientExample {
    
        private final String USER_AGENT = "Mozilla/5.0";
    
        public static void main(String[] args) throws Exception {
    
            HttpClientExample http = new HttpClientExample();
    
            System.out.println("Testing 1 - Send Http GET request");
            http.sendGet();
    
            System.out.println("\nTesting 2 - Send Http POST request");
            http.sendPost();
    
        }
    
        // HTTP GET请求
        private void sendGet() throws Exception {
    
            String url = "http://www.google.com/search?q=developer";
    
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet(url);
    
            //添加请求头
            request.addHeader("User-Agent", USER_AGENT);
    
            HttpResponse response = client.execute(request);
    
            System.out.println("\nSending 'GET' request to URL : " + url);
            System.out.println("Response Code : " +
                           response.getStatusLine().getStatusCode());
    
            BufferedReader rd = new BufferedReader(
                           new InputStreamReader(response.getEntity().getContent()));
    
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
    
            System.out.println(result.toString());
    
        }
    
        // HTTP POST请求
        private void sendPost() throws Exception {
    
            String url = "https://selfsolve.apple.com/wcResults.do";
    
            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(url);
    
            //添加请求头
            post.setHeader("User-Agent", USER_AGENT);
    
            List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
            urlParameters.add(new BasicNameValuePair("sn", "C02G8416DRJM"));
            urlParameters.add(new BasicNameValuePair("cn", ""));
            urlParameters.add(new BasicNameValuePair("locale", ""));
            urlParameters.add(new BasicNameValuePair("caller", ""));
            urlParameters.add(new BasicNameValuePair("num", "12345"));
    
            post.setEntity(new UrlEncodedFormEntity(urlParameters));
    
            HttpResponse response = client.execute(post);
            System.out.println("\nSending 'POST' request to URL : " + url);
            System.out.println("Post parameters : " + post.getEntity());
            System.out.println("Response Code : " +
                                        response.getStatusLine().getStatusCode());
    
            BufferedReader rd = new BufferedReader(
                            new InputStreamReader(response.getEntity().getContent()));
    
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
    
            System.out.println(result.toString());
    
        }
    
    }
    

    参考

    1.Apache HttpClient
    2.Apache HttpClient examples
    3.Automate login a website with Java HttpsURLConnection

    相关文章

      网友评论

      • 3d77b6b0a276:您好,我使用GET方式对百度发送请求,代码执行成功。对于google的GET请求应该如何实现?
        JellyCai:要访问Google的话,得翻墙:smile:
      • 3d77b6b0a276:您好,试了一下您的代码,爆出如下错误,能帮忙解决一下吗?

        Exception in thread "main" java.net.ConnectException: Connection timed out: connect
        天人两衰:超时错误,换个能正常访问的网站

      本文标题:如何在Java中发送HTTP GET/POST请求

      本文链接:https://www.haomeiwen.com/subject/tdcmvttx.html