转自:

java网络编程-HTTP编程_Stillsings的博客-CSDN博客HTTP编程Java HTTP编程支持模拟成浏览器的方式去访问网页URL, Uniform Resource Locator,代表一个资源URLConnection获取资源连接器根据URL的openConnection()方法获得URLConnectionconnect方法,建立和资源的联系通道getInputStream方法,获取资源的内容示例代码:Get获取网页h...https://blog.csdn.net/Listen_heart/article/details/104448012


【1】HTTP编程

Java HTTP编程

支持模拟成浏览器的方式去访问网页
    URL, Uniform Resource Locator,代表一个资源
    URLConnection
        获取资源连接器
        根据URL的openConnection()方法获得URLConnection
        connect方法,建立和资源的联系通道
        getInputStream方法,获取资源的内容

【2】URLConnection

示例代码1:Get获取网页html-使用URLConnection

package com.lihuan.network.demo03;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;public class URLConnectionGetTest {public static void main(String[] args) {try {String urlName = "http://www.baidu.com";URL url = new URL(urlName);URLConnection connection = url.openConnection();//建立联系通道connection.connect();//打印http的头部信息Map<String, List<String>> headers = connection.getHeaderFields();for (Map.Entry<String, List<String>> entry : headers.entrySet()){String key = entry.getKey();for (String value : entry.getValue()){System.out.println(key + ":" + value);}}//输出将要收到的内容属性信息System.out.println("-------------");System.out.println("getContentType: " + connection.getContentType());System.out.println("getContentLength: " + connection.getContentLength());System.out.println("getContentEncoding: " + connection.getContentEncoding());System.out.println("getDate: " + connection.getDate());System.out.println("getExpiration: " + connection.getExpiration());System.out.println("getLastModified:" + connection.getLastModified());System.out.println("-------------");BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));// 输出收到的内容String line = "";while ((line = br.readLine()) != null){System.out.println(line);}br.close();} catch (IOException e) {e.printStackTrace();}}
}

实例代码2: Post提交表单-使用 HttpURLConnection

package com.lihuan.network.demo03;import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class URLConnectionPostTest {public static void main(String[] args) throws IOException {String urlString = "https://tools.usps.com/zip-code-lookup.htm?byaddress";Object userAgent = "HTTPie/0.9.2";Object redirects = "1";CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));Map<String, String> params = new HashMap<String, String>();params.put("tAddress", "1 Market Street");params.put("tCity", "san Francisco");params.put("sState", "CA");String result = doPost(new URL(urlString), params,userAgent == null ? null : userAgent.toString(),redirects == null ? -1 : Integer.parseInt(redirects.toString()));System.out.println(result);}public static String doPost(URL url, Map<String, String> nameValuePairs, String userAgent, int redirects) throws IOException {HttpURLConnection connection = (HttpURLConnection) url.openConnection();//设置请求头if(userAgent != null){connection.setRequestProperty("User-Agent", userAgent);}//设为不自动重定向if(redirects >= 0){connection.setInstanceFollowRedirects(false);}//设置可以使用conn.getOutputStream().printconnection.setDoOutput(true);//输出请求的参数try (PrintWriter out = new PrintWriter(connection.getOutputStream())){boolean first = true;for (Map.Entry<String, String> pair : nameValuePairs.entrySet()){//参数拼接if(first){first = false;}else{out.print('&');}String name = pair.getKey();String value = pair.getValue();out.print(name);out.print("=");out.print(URLEncoder.encode(value, "UTF-8"));}}String encoding = connection.getContentEncoding();if(encoding == null){encoding = "UTF-8";}if(redirects > 0){int responseCode = connection.getResponseCode();System.out.println("responseCode: " + responseCode);if(responseCode == HttpURLConnection.HTTP_MOVED_PERM|| responseCode == HttpURLConnection.HTTP_MOVED_TEMP|| responseCode == HttpURLConnection.HTTP_SEE_OTHER){String location = connection.getHeaderField("Location");if(location != null){URL base = connection.getURL();connection.disconnect();return doPost(new URL(base, location), nameValuePairs, userAgent, redirects - 1);}}}else if(redirects == 0){throw new IOException("Too many redirects");}//接下来获取html内容StringBuilder response = new StringBuilder();try (Scanner in = new Scanner(connection.getInputStream(), encoding)){while (in.hasNextLine()){response.append(in.nextLine());response.append("\n");}}catch (IOException e){InputStream err = connection.getErrorStream();if(err == null) throw e;try (Scanner in = new Scanner(err)){response.append(in.nextLine());response.append("\n");}}return response.toString();}
}

【3】JDK HttpClient

JDK 9新增,JDK10更新,JDK11正式发
    java.net.http包
    取代URLConnection
    支持HTTP/1.1和HTTP/2
    实现大部分HTTP方法
    主要类
        HttpClient
        HttpRequest
        HttpResponse

HttpComponents

是一个集成的Java HTTP工具包
    实现所有HTTP方法: get/post/put/delete
    支持自动转向
    支持https协议
    支持代理服务器等

HttpComponent示例代码3:Get获取网页html

package com.lihuan.network.demo04;import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import java.io.IOException;public class HttpComponentGetTest {public static void main(String[] args) {CloseableHttpClient httpClient = HttpClients.createDefault();RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(5000).setRedirectsEnabled(true).build();HttpGet httpGet = new HttpGet("http://www.baidu.com");httpGet.setConfig(requestConfig);String strResult = "";try {HttpResponse httpResponse = httpClient.execute(httpGet);if(httpResponse.getStatusLine().getStatusCode() == 200){strResult = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");System.out.println(strResult);}else{}} catch (IOException e) {e.printStackTrace();}finally {try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}}
}

HttpComponent实例代码4:Post提交表单

package com.lihuan.network.demo04;import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;public class HttpComponentsPostTest {public static void main(String[] args) throws UnsupportedEncodingException {//获取可关闭的 httpClientCloseableHttpClient httpClient = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();//配置超时时间RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(10000).setConnectionRequestTimeout(10000).setSocketTimeout(10000).setRedirectsEnabled(false).build();HttpPost httpPost = new HttpPost("https://tools.usps.com/zip-code-lookup.htm?byaddress");//设置超时时间httpPost.setConfig(requestConfig);List<BasicNameValuePair> list = new ArrayList<>();list.add(new BasicNameValuePair("tAddress", URLEncoder.encode("1 Market Street", "UTF-8")));list.add(new BasicNameValuePair("tCity", URLEncoder.encode("san Francisco", "UTF-8")));list.add(new BasicNameValuePair("sState", "CA"));try {UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8");//设置post请求参数httpPost.setEntity(entity);httpPost.setHeader("User-Agent", "HTTPie/0.9.2");HttpResponse httpResponse = httpClient.execute(httpPost);String strResult = "";if(httpResponse != null){System.out.println(httpResponse.getStatusLine().getStatusCode());if(httpResponse.getStatusLine().getStatusCode() == 200){strResult = EntityUtils.toString(httpResponse.getEntity());}else{strResult = "Error Response:" + httpResponse.getStatusLine().toString();}}else{}System.out.println(strResult);} catch (IOException e) {e.printStackTrace();} finally {if(httpClient != null){try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}}}
}

转:java网络编程-HTTP编程相关推荐

  1. java 网络通讯_JAVA编程实现TCP网络通讯的方法示例

    本文实例讲述了JAVA编程实现TCP网络通讯的方法.分享给大家供大家参考,具体如下: TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字 ...

  2. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  3. Java学习总结:52(Java网络编程)

    Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类,在此包中有一下两个主要的核心操作类. ServerSocket类:是一个封装支持的TCP协议的操作类,主要工作在 ...

  4. Java - 网络编程(NetWork)

    Java - 网络编程(NetWork) 一.java.net包下的 InetAddress 类的使用: > 一个 InetAddress 代表着一个IP地址 > 主要用来查看本机的IP和 ...

  5. 【Java】 Java网络编程总结

     一.网络编程三要素: IP地址:每个设备在网络中的唯一标识. 端口号:每个程序在设备上的唯一标识. 协议:为计算机网络中进行数据交换而建立的规则或约定的集合. UDP: 面向无连接,数据不安全,速度 ...

  6. Java网络编程笔记5

    在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...

  7. JAVA网络IO编程

    2019独角兽企业重金招聘Python工程师标准>>> JAVA网络IO编程(BIO NIO AIO) 一.传统的BIO编程 1.网络编程的基本模型是C/S模型,即两个进程间的通信. ...

  8. 实验五 Java网络编程及安全 实验报告 20135232王玥

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序与设计         班级:1352 姓名:王玥 学号:20135232 成绩:             指导 ...

  9. NIO详解(一):java网络编程IO总结(BIO、NIO、AIO)

    1.基本概念 在Java网络通信中,最基本的概念就是Socket编程了.Socket又称"套接字" 向网络发出请求或者应答网络请求. Socket 和ServerSocket类库位 ...

  10. 04.Java网络编程(转载)

    1.网络编程 1.1计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 按照计算机网络的定义,通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含 ...

最新文章

  1. Java中super关键字的位置
  2. TurboMail邮件服务器荣膺“2012年度中国行业信息化最佳产品奖”
  3. boost::detail::spinlock相关的测试程序
  4. SQL Server 查询表备注信息的语句
  5. C语言试题六十一之请编写函数fun:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成新串放在t所指数组中。
  6. 死信队列和延迟队列_在实践中使用延迟队列
  7. linux top 命令的结果
  8. nasa 开源_NASA公开数据,白宫新员工以及更多开源新闻
  9. 单IP无TMG拓扑Lync Server 2013:外部访问
  10. thymeleaf的url属性
  11. 计算机改网络id,Windows 8普通版移除“网络ID”修改功能
  12. 租用服务器怎么免去后顾之忧?
  13. Mysql中给数据库,表,字段设置字符编码
  14. 汇编proto、proc、invoke伪指令与函数声明、函数定义、函数调用
  15. VR驾驶模拟器:以科技赋能加速推动驾培行业转型升级
  16. java基于微信小程序的在线学习考试测试系统小程序 uniapp
  17. 20165219 2017-2018-2《Java程序设计》结对编程一 第一周总结
  18. 少有人走的路 - 读书笔记
  19. python documents in chinese_基于 Python 的简单自然语言处理实践
  20. 如何进行复盘分析,复盘分析的步骤是什么?

热门文章

  1. CF623E Transforming Sequence(多项式/倍增fft/动态规划)
  2. P4151 [WC2011]最大XOR和路径(线性基)
  3. 2019 秦皇岛 I - Invoker Gym - 102361I dp
  4. ADPC2-D 分配颜色
  5. Quadratic Form
  6. 2020牛客国庆集训派对day3 Points
  7. 【每日一题】8月7日题目精讲—双栈排序
  8. 牛客网 【每日一题】5月26日题目精讲 [JSOI2007]建筑抢修
  9. 【CF1100F】 Ivan and Burgers (分治+线性基)
  10. CometOJ-[Contest #10]鱼跃龙门【exgcd】