java实现http请求的简单介绍

博主:adminadmin 2023-01-11 09:09:10 895

本篇文章给大家谈谈java实现http请求,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java怎么主动发送http请求

实现思路就是先定义请求头内容,之后进行请求头设置。

定义请求头

LinkedHashMapString,String headers = new LinkedHashMapString,String();

headers.put("Content-type","text/xml");

headers.put("Cache-Control", "no-cache");

headers.put("Connection", "close");

给HttpPost 设置请求头

HttpPost httpPost = new HttpPost("地址");

if (headers != null) {

for (String key : headers.keySet()) {

httpPost.setHeader(key, headers.get(key));

}

}

备注:只需要在map中设置相应的请求头内容即可。根据实际需要修改即可

如何使用HttpClient包实现JAVA发起HTTP请求

package com.sunyard.util;

import com.sunyard.constans.Constants;

import org.apache.commons.httpclient.*;

import org.apache.commons.httpclient.methods.GetMethod;

import org.apache.commons.httpclient.methods.PostMethod;

import org.apache.commons.httpclient.methods.RequestEntity;

import org.apache.commons.httpclient.methods.StringRequestEntity;

import org.apache.commons.httpclient.params.HttpConnectionManagerParams;

import org.apache.commons.lang.StringUtils;

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

import java.io.IOException;

import java.net.URL;

public class HTTPUtils {

    private final static Logger logger = LogManager.getLogger(Constants.LOGNAME);

    private final static String OPERATER_NAME = "【HTTP操作】";

    private final static int SUCCESS = 200;

    private final static String UTF8 = "UTF-8";

    private HttpClient client;

    private static HTTPUtils instance = new HTTPUtils();

    /**

     * 私有化构造器

     */

    private HTTPUtils() {

        HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();

        HttpConnectionManagerParams params = httpConnectionManager.getParams();

        params.setConnectionTimeout(5000);

        params.setSoTimeout(20000);

        params.setDefaultMaxConnectionsPerHost(1000);

        params.setMaxTotalConnections(1000);

        client = new HttpClient(httpConnectionManager);

        client.getParams().setContentCharset(UTF8);

        client.getParams().setHttpElementCharset(UTF8);

    }

    /**

     * get请求

     */

    public static String get(URL url) {

        return instance.doGet(url);

    }

    private String doGet(URL url) {

        long beginTime = System.currentTimeMillis();

        String respStr = StringUtils.EMPTY;

        try {

            logger.info(OPERATER_NAME + "开始get通信,目标host:" + url);

            HttpMethod method = new GetMethod(url.toString());

            // 中文转码

            method.getParams().setContentCharset(UTF8);

            try {

                client.executeMethod(method);

            } catch (HttpException e) {

                logger.error(new StringBuffer("发送HTTP GET给\r\n").append(url)

                        .append("\r\nHTTP异常\r\n"), e);

            } catch (IOException e) {

                logger.error(new StringBuffer("发送HTTP GET给\r\n").append(url)

                        .append("\r\nIO异常\r\n"), e);

            }

            if (method.getStatusCode() == SUCCESS) {

                respStr = method.getResponseBodyAsString();

            }

            // 释放连接

            method.releaseConnection();

            logger.info(OPERATER_NAME + "通讯完成,返回码:" + method.getStatusCode());

            logger.info(OPERATER_NAME + "返回内容:" + method.getResponseBodyAsString());

            logger.info(OPERATER_NAME + "结束..返回结果:" + respStr);

        } catch (Exception e) {

            logger.info(OPERATER_NAME, e);

        }

        long endTime = System.currentTimeMillis();

        logger.info(OPERATER_NAME + "共计耗时:" + (endTime - beginTime) + "ms");

        return respStr;

    }

    /**

     * POST请求

     */

    public static String post(URL url, String content) {

        return instance.doPost(url, content);

    }

    private String doPost(URL url, String content) {

        long beginTime = System.currentTimeMillis();

        String respStr = StringUtils.EMPTY;

        try {

            logger.info(OPERATER_NAME + "开始post通信,目标host:" + url.toString());

            logger.info("通信内容:" + content);

            PostMethod post = new PostMethod(url.toString());

            RequestEntity requestEntity = new StringRequestEntity(content, "application/json;charse=UTF-8", UTF8);

            post.setRequestEntity(requestEntity);

            // 设置格式

            post.getParams().setContentCharset(UTF8);

            client.executeMethod(post);

            if (post.getStatusCode() == SUCCESS) {

                respStr = post.getResponseBodyAsString();

            }

            logger.info(OPERATER_NAME + "通讯完成,返回码:" + post.getStatusCode());

            logger.info(OPERATER_NAME + "返回内容:" + post.getResponseBodyAsString());

            logger.info(OPERATER_NAME + "结束..返回结果:" + respStr);

            post.releaseConnection();

        } catch (Exception e) {

            logger.error(OPERATER_NAME, e);

        }

        long endTime = System.currentTimeMillis();

        logger.info(OPERATER_NAME + "共计耗时:" + (endTime - beginTime) + "ms");

        return respStr;

    }

    

}

怎样用JAVA实现模拟HTTP请求,得到服务器的响应时间等参数

a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4n1Ddn1ubuHI-Pjc1uycz0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0LPHfzPHm4PHczPH0YrjTsr0" target="_blank" class="baidu-highlight"java.net/a.*;

public class HttpDemo{

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

        URL url = new URL('地址');

        HttpURLConnection http = (HttpURLConnection)url.openConnection();

        //获取网页的源码

        BufferedReader br = new BufferedReader(new InputStreamReader(http.getInputStream()));

        String line = "";

        while((line=br.readLine())!=null){

            System.out.println(line);

        }

        br.close();

        //获取参数:

        String value = getRequestProperty(String key);

    }

}

北大青鸟java培训:http协议请求处理过程?

随着互联网的不断发展,用户在访问互联网的时候使用的终端设备类型也在不断的变化,但是这些都是基于http协议来实现的,下面我们就简单分析一下,http发送请求的处理过程。

HTTP协议是基于TCP协议的,所以它使用面向连接的方式发送请求,通过stream二进制流的方式传给对方。

当然,到了TCP层,它会把二进制流变成一个的报文段发送给服务器。

在发送给每个报文段的时候,都需要对方有一个回应ACK,来保证报文可靠地到达了对方。

如果没有回应,那么TCP这一层会进行重新传输,直到可以到达。

同一个包有可能被传了好多次,但是HTTP这一层不需要知道这一点,因为是TCP这一层在埋头苦干。

TCP层发送每一个报文的时候,都需要加上自己的地址(即源地址)和它想要去的地方(即目标地址),将这两个信息放到IP头里面,交给IP层进行传输。

IP层需要查看目标地址和自己是否是在同一个局域网。

如果是,就发送ARP协议来请求这个目标地址对应的MAC地址,然后将源MAC和目标MAC放入MAC头,发送出去即可。

如果不在同一个局域网,就需要发送到网关,还要需要发送ARP协议,来获取网关的MAC地址,然后将源MAC和网关MAC放入MAC头,发送出去。

网关收到包发现MAC符合,取出目标IP地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的MAC地址,将包发给下一跳路由器。

这样路由器一跳一跳终于到达目标的局域网。

这个时候,后一跳的路由器能够发现,目标地址就在自己的某一个出口的局域网上。

于是,在这个局域网上发送ARP,获得这个目标地址的MAC地址,将包发出去。

目标的机器发现MAC地址符合,就将包收起来;发现IP地址符合,根据IP头中协议项,知道自己上一层是TCP协议,于是解析TCP的头,里面有序列号,IT培训建议需要看一看这个序列包是不是我要的,如果是就放入缓存中然后返回一个ACK,如果不是就丢弃。

TCP头里面还有端口号,HTTP的服务器正在监听这个端口号。

于是,目标机器自然知道是HTTP服务器这个进程想要这个包,于是将包发给HTTP服务器。

HTTP服务器的进程看到,原来这个请求是要访问一个网页,于是就把这个网页发给客户端。

java http请求

可能是这个网站做了权限校验啥的吧,你在浏览器是先登录以后再请求的这个接口,但是你的JAVA客户端没有做登录,直接请求,被认为是非法请求,所以就不给你返回数据了

关于java实现http请求和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。