搜索
首页Javajava教程java:http请求(代码详解)

java原生API

public class HttpRequest {

      /**
     * 向指定URL发送GET方法的请求
     * 
     * @param url
     *            发送请求的URL
     * @param param
     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            // 建立实际的连接
            connection.connect();            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }        // 使用finally块来关闭输入流
        finally {            try {                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }        return result;
    }    /**
     * 向指定 URL 发送POST方法的请求
     * 
     * @param url
     *            发送请求的 URL
     * @param param
     *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";        try {
            URL realUrl = new URL(url);            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());            // 发送请求参数
            out.print(param);            // flush输出流的缓冲
            out.flush();            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(                    new InputStreamReader(conn.getInputStream()));
            String line;            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }        //使用finally块来关闭输出流、输入流
        finally{            try{                if(out!=null){
                    out.close();
                }                if(in!=null){
                    in.close();
                }
            }            catch(IOException ex){
                ex.printStackTrace();
            }
        }        return result;
    }    
    /**
     * @param args
     */
    public static void main(String[] args) {        // TODO Auto-generated method stub
          //发送 GET 请求//        String s=HttpRequest.sendGet("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo", "mobileCode=13069208531&userID=");//        System.out.println(s);

        //发送 POST 请求
        String sr=HttpRequest.sendPost("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo", "mobileCode=13069208531&userID=");
        System.out.println(sr);
    }

}

httpclient  需要jar包:
搜狗截图18年08月10日1419_14.png

public class HTTPUtils {
     private final static Logger logger = Logger.getLogger(HTTPUtils.class);     private final static String OPERATER_NAME = "【HTTP操作】";     private final static int SUCCESS = 200;     private final static String UTF8 = "UTF-8";     private HttpClient client;     private final String respondTypeXML = "application/x-www-form-urlencoded";     private final String respondTypeJSON = "application/json;charse=UTF-8";     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);
         }     public static String get(URL url) {         return instance.doGet(url);
         }    private String doGet(URL url) {        long beginTime = System.currentTimeMillis();
        String respStr = "";
        HttpMethod method = null;        try {
            logger.info(OPERATER_NAME + "开始get通信,目标host:" + url);
            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();
            }
            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);
        }finally{            if(method != null){
                method.releaseConnection();
            }
        }        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 = "";
        PostMethod post = null;        try {
            logger.info(OPERATER_NAME + "开始post通信,目标host:" + url.toString());
            logger.info("通信内容:" + content);
            post = new PostMethod(url.toString());
            RequestEntity requestEntity = new StringRequestEntity(content,
                    respondTypeXML, 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);
        }finally{            if(post != null){
                post.releaseConnection();
            }
        }        long endTime = System.currentTimeMillis();
        logger.info(OPERATER_NAME + "共计耗时:" + (endTime - beginTime) + "ms");        return respStr;
    }    /**
     * @param args
     * @throws MalformedURLException
     */
    public static void main(String[] args) throws MalformedURLException {        // TODO Auto-generated method stub
        JSONObject json = new JSONObject();
        json.put("mobileCode", "13069208531");
        json.put("userID", "");
        URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");//      URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx"//              + "/getMobileCodeInfo?mobileCode=13069208531&userID=");
            String resp = post(url, json.toString());        //String resp = get(url);
        System.out.println("resp:"+resp);
    }
}

httpclient:

public class HttpClientUtil {


    public static void get(String number) throws Exception{
        HttpClient client = new HttpClient();
        GetMethod get = new GetMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx"
                + "/getMobileCodeInfo?mobileCode=" + number + "&userID=");        // 指定传输的格式为get请求格式
        get.setRequestHeader("Content-Type", "text/xml; charset=utf-8");        // 发送请求
        int code = client.executeMethod(get);
        System.out.println("Http:状态码为:" + code);

        String result = get.getResponseBodyAsString();
        System.out.println("返回的结果为:" + result);
    }    public static void post(String number) throws Exception {        //HttpClient:在java代码中模拟Http请求
        // 创建浏览器对象
        HttpClient client = new HttpClient();        // 填写数据,发送get或者post请求
        PostMethod post = new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");        // 指定传输的格式为默认post格式
        post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");     
        // 传输参数
        post.setParameter("mobileCode", number);
        post.setParameter("userID", "");        // 发送请求
        int code = client.executeMethod(post);
        System.out.println("Http:状态码为:" + code);

        String result = post.getResponseBodyAsString();
        System.out.println("返回的结果为:" + result);
    }    /**
     * @Description soap post方式请求,但是传输的数据为xml格式,有利于数据的维护
     * @param number
     * @throws Exception
     */
    //它有两个版本soap1.1和soap1.2,jdk1.7及以上才可以使用soap1.2。
    public void soap(String number) throws Exception {        //HttpClient:在java代码中模拟Http请求
        // 创建浏览器对象
        HttpClient client = new HttpClient();        // 填写数据,发送get或者post请求
        PostMethod post = new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");        // 指定传输的格式为xml格式
        post.setRequestHeader("Content-Type", "application/soap+xml;charset=utf-8");        // 传输xml,加载soap.txt
       InputStream in = HttpClientUtil.class.getClassLoader().getResourceAsStream("/soap.txt");//返回值是一个InputStream
        post.setRequestBody(in);        // 发送请求
        int code = client.executeMethod(post);
        System.out.println("Http:状态码为:" + code);

        String result = post.getResponseBodyAsString();        // 如果采用的是soap,则返回的数据也是基于xml的soap格式
        System.out.println("返回的结果为:" + result);
    }    //wsimport -s . -p com.hexy.ws http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL 
    public static void wsdl(){        // 获取一个ws服务
        MobileCodeWS ws = new MobileCodeWS();        // 获取具体的服务类型:get post soap1.1 soap1.2
        MobileCodeWSSoap wsSoap = ws.getMobileCodeWSSoap();
        String address = wsSoap.getMobileCodeInfo("18312345678", null);
        System.out.println("手机归属地信息为:" + address);
    }    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub
        post("18312345678");        //wsdl();
        //soap("18312345678");
    }

}

soap.txt

<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <getMobileCodeInfo xmlns="http://WebXml.com.cn/">
      <mobileCode>13069208531</mobileCode>
      <userID></userID>
    </getMobileCodeInfo>
  </soap12:Body></soap12:Envelope>

相关推荐:

网络 - Java 异步http请求。

Java与Http协议的详解

以上是java:http请求(代码详解)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?Mar 17, 2025 pm 05:46 PM

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?Mar 17, 2025 pm 05:44 PM

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?Mar 17, 2025 pm 05:43 PM

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Mar 17, 2025 pm 05:35 PM

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器