java发送http方式有哪几种?相关实例展示

BSO 2020-08-27 15:49:40 java常见问答 5818

随着时代的迅猛发展,java编程语言的应用变得愈加广泛。今天主要为大家介绍一下,java发送http的方式有哪一些,并且为大家展示一些实例。

首先,为大家大致地介绍一下,java发送http的方式主要有HttpURLConnection,URLConnection,HttpClient以及Socket这四种,接下来会通过代码详细解析这几种方式,并简单介绍它们。

第一种是:HttpURLConnection

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

同时它也是URLConnection的子类,可以提供更多的方法,使用更方便。实例如下:

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"));
    }
}

第二种是:URLConnection

它也是使用JDK原生提供的net,无需其他jar包;同样情况下,建议使用HttpURLConnection。实例如下:

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));
    }
}

第三种是:HttpClient

它的使用更加方便,受众更加广泛,但依赖于第三方jar包,相关maven依赖如下:

<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient -->
<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency
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));
    }
}

第四种是:Socket

它也是使用JDK原生提供的net,无需其他jar包;但是它使用起来有点麻烦。实例如下:

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入门知识,敬请关注奇Q工具网。

推荐阅读:

java基础语法包括哪些内容?程序设计有哪些?

java基础类型,8大基础类型分别是什么?

java基础题大全详解