前言

唠嗑呗(咳咳…应该叫励志)有个同学,关系非常铁的,他啥都好(肯定有个但是),但是…很消极,所以我也想开导开导他(这个怎么说呢,站在不同位置,可能我想开导他让他调整心态,好好走IT道路,但是也有可能他在开导我,让我放弃这条“不归路”,认为没有前途)。之前听过一段话,对我影响很深:一个学生经常被问到干活辛苦还是学习辛苦(我也经常被长辈问到,而且非常之反感这个问题,不过看了这个就可以直接怼过去了),直到有一天他看到一群搬砖工人,有说有笑工作中,不在乎工作,不问出路,不快乐才是最辛苦的。

正文准备

很多时候有了先人的理解,我们完全可以拿过来照搬照抄。然而,我这种呆逼,以前大多数情况下都是自己去看,不习惯、不喜欢、不希望、满怀期待的相信自己…程序猿的世界(或者说人类的世界)不能够这样。理解别人的代码,是学习,网上一大把好的资料先了解,在自我实践不是更好!!!

学习思路:

  • 1.写一个简单的HttpURLConnection Demo,并且测试通过
  • 2.找文章了解HttpURLConnection源码;
  • 3.根据别人的文章以及自己的Demo,按照Demo流程去理解
  • 4.全方位了解HttpURLConnection源码知识
  • 额外还需要去理解服务端http请求解析

1.工具准备

首先我们需要安装一个SourceInsight工具,一个面向项目开发的程序编辑器和代码浏览器,这里主要是方便浏览源码(当然了,不用也是完全可以的,根据个人)

2.URL知识点准备

URL的组成和含义:

URL,全称Uniform Resource Locator,统一资源定位器。

当您点击 HTML 页面中的某个链接时,对应的 < a>标签指向万维网上的一个地址。
统一资源定位器(URL)用于定位万维网上的文档(或其他数据)。

统一资源定位符(URL)是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL地址,这种地址可以是本地磁盘,也可以是局域网上的某一台计算机,更多的是Internet上的站点。简单地说,URL就是Web地址,俗称“网址”。

URI 方案集,包含如何访问 Internet 上的资源的明确指令。

URL 是统一的,因为它们采用相同的基本语法,无论寻址哪种特定类型的资源(网页、新闻组)或描述通过哪种机制获取该资源。

URL的一般格式为(带方括号[]的为可选项):

protocol : // hostname[:port] / path / [;parameters][?query]#fragment

URL的组成:URL由三部分组成:协议类型,主机名和路径及文件名

  • protocol(协议):指定使用的传输协议

file 资源是本地计算机上的文件。格式file://
ftp 通过 FTP访问资源。格式 FTP://
gopher 通过 Gopher 协议访问该资源。
http 通过 HTTP 访问该资源。 格式 HTTP://
https 通过安全的 HTTPS 访问该资源。 格式 HTTPS://
mailto 资源为电子邮件地址,通过 SMTP 访问。 格式 mailto:
MMS 通过 支持MMS(流媒体)协议的播放该资源。(代表软件:Windows Media Player)格式MMS://
ed2k 通过 支持ed2k(专用下载链接)协议的P2P软件访问该资源。(代表软件:电驴) 格式 ed2k://
Flashget 通过 支持Flashget:(专用下载链接)协议的P2P软件访问该资源。(代表软件:快车) 格式 Flashget://
thunder 通过 支持thunder(专用下载链接)协议的P2P软件访问该资源。(代表软件:迅雷) 格式 thunder://
news 通过 NNTP 访问该资源。
tencent 通过支持tencent(专用聊天连接) 协议和用户对话。(代表软件:QQ、TM)格式 tencent://message/?uin=号码&Site=&Menu=yes
msnim 通过支持msnim(专用聊天连接) 协议和用户对话。(代表软件:MSN、WLM) 格式 msnim:chat?contact=邮箱地址

  • hostname(主机名):是指存放资源的服务器的域名系统 (DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password)。

  • port(端口号):整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。

  • path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址

  • ;parameters(参数):这是用于指定特殊参数的可选项。

  • ?query(查询):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

  • fragment,信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

注意,Windows 主机不区分 URL 大小写,但是,Unix/Linux 主机区分大小写。

下面列表是常见的URL中定位和标识的服务或文件:

  • http:文件在WEB服务器上.
  • file:文件在您自己的局部系统或匿名服务器上
  • ftp:文件在FTP服务器上
  • gopher:文件在gopher服务器上
  • wais:文件在wais服务器上
  • news:文件在Usenet服务器上
  • telnet:连接到一个支持Telnet远程登录的服务器上

demo

package com.fosheng.originaltec.urlconnection;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;/*** Copyright (C), 2019-2020, 佛生* FileName: InterfaceUtil* Author: 佛学徒* Date: 2020/12/2 9:48* Description: 調用網絡請求接口,測試post* History:*/
public class InterfaceUtil {public static String gethttp(String urlStr) {String result ;HttpURLConnection connection = null;try {URL url = new URL(urlStr);//得到connection对象。connection = (HttpURLConnection) url.openConnection();//设置请求方式connection.setRequestMethod("GET");//连接connection.connect();//得到响应码int responseCode = connection.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {//得到响应流InputStream inputStream = connection.getInputStream();//将响应流转换成字符串result = is2String(inputStream);//将流转换为字符串。} else {result = "當前狀態信息:" + responseCode;}} catch (Exception e) {e.printStackTrace();result = e.getMessage();} finally {if (connection != null) {connection.disconnect();}}return result;}private static String is2String(InputStream inputStream) throws IOException {ByteArrayOutputStream result = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer)) != -1) {result.write(buffer, 0, length);}String str = result.toString(StandardCharsets.UTF_8.name());return str;}
}

在test类中添加一个测试用例

package com.fosheng.originaltec.urlconnection;import org.junit.Test;/*** Copyright (C), 2019-2020, 佛生* FileName: InterfaceUtilTest* Author: 佛学徒* Date: 2020/12/2 10:08* Description:* History:*/
public class InterfaceUtilTest {@Testpublic void testURLConnection() {String result = InterfaceUtil.gethttp("https://www.baidu.com/");System.out.println("輸出結果:" + result);}
}

输出结果:

http(S)系列之(五):android之HttpURLConnection源码解析(1)相关推荐

  1. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  2. http://a.codekk.com/detail/Android/grumoon/Volley 源码解析

    http://a.codekk.com/detail/Android/grumoon/Volley 源码解析

  3. BAT高级架构师合力熬夜15天,肝出了这份PDF版《Android百大框架源码解析》,还不快快码住。。。

    前言 为什么要阅读源码? 现在中高级Android岗位面试中,对于各种框架的源码都会刨根问底,从而来判断应试者的业务能力边际所在.但是很多开发者习惯直接搬运,对各种框架的源码都没有过深入研究,在面试时 ...

  4. Android通知系统源码解析

    Android通知系统源码解析 1. 概述 2. 流程图 2.1. 发送通知流程图 3. 源码解析 3.1. 使用通知--APP进程 3.1.1. 创建通知: 3.1.2. 发送(更新)通知: 3.1 ...

  5. Android Gradle Plugin 源码解析(上)

    一.源码依赖 本文基于: android gradle plugin版本: com.android.tools.build:gradle:2.3.0 gradle 版本:4.1 Gradle源码总共3 ...

  6. Android之EasyPermissions源码解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! 前言 我们知道在Android中想要申请权限就需要在AndroidManifest ...

  7. Android之LocalBroadcastManager源码解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! 前言 广播想必大家都不陌生,日常开发中同一个APP中的多个进程之间需要进行传输信息 ...

  8. Android之AsyncTask源码解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 AsyncTask是一种轻量级的异步任务类,内部封装了Thread和Ha ...

  9. Android之DiskLruCache源码解析

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/73863258 本文出自:[顾林海的博客] 个人开发的微信小程序,目前功 ...

  10. Android Hawk的源码解析,一款基于SharedPreferences的存储框架

    转载请标注:http://blog.csdn.net/friendlychen/article/details/76218033 一.概念 SharedPreferences的使用大家应该非常熟悉啦. ...

最新文章

  1. 安全证书导入到java中的cacerts证书库
  2. 自拟计算机作文100字,介绍电脑的作文100字
  3. 算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...
  4. scanner 获取控制台信息_Java使用Scanner类进行控制台输入实现方法
  5. c# 溢出抛异常_C#中的int是否没有溢出异常?
  6. 【几何/数学】概念的理解 —— (非)刚体变换((non-)rigid transformation)
  7. 【渝粤教育】广东开放大学 hadoop数据管理 形成性考核
  8. Julia : csv =hdf5
  9. 10分钟部署一套开源表单系统
  10. 数据挖掘概念与技术(原书第三版)范明 孟小峰译-----第六章课后习题答案
  11. 计算机电源分金牌,机·科普贴:电脑电源金、银、铜牌到底是什么意思?
  12. Oracle使用ancestor incarnation完成基于时间点的不完全恢复
  13. 2015出现神曲空挡期,玖月奇迹接棒筷子兄弟?
  14. 43 备忘录模式(详解版)
  15. 电商抖音直播带货SOP工作流程主播计划脚本方案
  16. 信息网络向价值网络演进过程中产品形态的思考
  17. 回滚日志(undo log)介绍
  18. Grafana(10445) +Pormetheus + Nginx 监控 Http API 2xx 3xx 4xx
  19. 图论(6)树的概念,中心与形心
  20. weboffice使用记录

热门文章

  1. 人资(人事)送命连环问,51个问题。
  2. Matlab导入Excel数据快速绘图
  3. python金融反欺诈-项目实战
  4. 离散小波变换wavedec matlab,Matlab实现小波变换
  5. SAR图像的统计信息
  6. Excel中不复制隐藏行
  7. WPS设置奇偶页页眉不同
  8. 【云计算学习教程】云应用是什么?典型的云应用有哪些?
  9. 三极管实现与门、或门和非门操作
  10. linux下安装sg11,linux服务器怎么装SG11解密插件?