精华内容
下载资源
问答
  • URL协议 URL编码

    2018-03-15 19:33:37
    Url协议就是 规定 url地址的格式。 协议规定格式:scheme://host.domain:port/path/filenamehttp://www.baidu.comhttp://mp.csdn.net/postedit/XXX协议名称:// 域名(ip地址):80/路径/文件a.htm scheme - 定义...

    平时我们写的 网址就是 url地址。

    Url协议就是 规定 url地址的格式。

     

    协议规定格式:scheme://host.domain:port/path/filename

    http://www.baidu.com

    http://mp.csdn.net/postedit/XXX

    协议名称:// 域名(ip地址):80/路径/文件a.htm

     

    scheme - 定义因特网服务的类型。最常见的类型是 http, https,ftp

    host - 定义域主机(http 的默认主机是 www

    domain - 定义因特网域名,比如 w3school.com.cn

    :port - 定义主机上的端口号(http 的默认端口号是 80

    path - 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)。

    filename - 定义文档/资源的名称 


    为什么要有URL编码呢?

    如果我写的一个中文的网页要在 阿拉伯国家的电脑上进行显示。

    http://news.sina.com.cn/c/zg/2015-10-27/doc-博客.shtml

    中文字符在阿拉伯国家的电脑上会正常显示吗?

     

    Ul在线编码的工具:http://tool.chinaz.com/Tools/URLEncode.aspx


    展开全文
  • URL与http协议

    2017-03-08 21:18:12
    URL=URL协议类型+服务器IP地址+服务器端口号+需要访问的资源名称 http协议:超文本传输协议(HTTP,HyperText Transfer Protocol),规范/约束浏览器与服务器的沟通。

    URL=URL协议类型+服务器IP地址+服务器端口号+需要访问的资源名称
    http协议:超文本传输协议(HTTP,HyperText Transfer Protocol),规范/约束浏览器与服务器的沟通。

    展开全文
  • 引言http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。HTTP协议的主要特点是:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径...

    引言

    http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。HTTP协议的主要特点是:

    1.支持客户/服务器模式。

    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,通信速度很快。

    3.灵活:HTTP允许传输任意类型的数据对象。类型由Content-Type加以标记。

    4.无连接:即每次连接只处理一个请求,处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

    5.无状态:无状态是指协议对于事务处理没有记忆能力。

    http1.0协议默认的是非持久连接, HTTP1.1默认的连接方式为持久连接。

    非持久连接:每次服务器发出一个对象后,相应的TCP连接就被关闭,也就是说每个连接都没有持续到可用于传送其他对象。每个TCP连接只用于传输一个请求消息和一个响应消息。

    持久连接:服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。HTTP/1.1的默认模式使用带流水线的持久连接。

    一、HTTP协议详解之请求

    //请求行POST /reg.jsp HTTP/ (CRLF)

    //消息报头Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*(CRLF)

    Accept-Language:zh-cn (CRLF)

    Accept-Encoding:gzip,deflate (CRLF)

    If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)

    If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)

    User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)

    Host:www.guet.edu.cn (CRLF)

    Connection:Keep-Alive (CRLF)

    (CRLF)

    //请求正文

    user=jeffrey&pwd=1234

    以上是http请求的三部:请求行、消息报头、请求正文。

    请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

    Method Request-URI HTTP-Version CRLF

    其中 Method表示请求方法(如POST、GET、PUT、DELETE等);Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行。

    二、HTTP协议详解之响应篇

    //状态行HTTP/1.1 200 OK (CRLF)

    //消息报头Cache-Control: private, max-age=30

    Content-Type: text/html; charset=utf-8

    Content-Encoding: gzip

    Expires: Mon, 25 May 2009 03:20:33 GMT

    Last-Modified: Mon, 25 May 2009 03:20:03 GMT

    Vary: Accept-Encoding

    Server: Microsoft-IIS/7.0

    X-AspNet-Version: 2.0.50727

    X-Powered-By: ASP.NET

    Date: Mon, 25 May 2009 03:20:02 GMT

    Content-Length: 12173

    //响应正文略

    HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

    状态行格式如下:

    HTTP-Version Status-Code Reason-Phrase CRLF

    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

    常见状态代码、状态描述、说明:

    200 OK      //客户端请求成功

    400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

    403 Forbidden  //服务器收到请求,但是拒绝提供服务

    404 Not Found  //请求资源不存在,eg:输入了错误的URL

    500 Internal Server Error //服务器发生不可预期的错误

    503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    三、HTTP协议详解之消息报头

    HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行;对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。

    HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。

    1、请求报头

    请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

    常用的请求报头

    Accept请求报头域用于指定客户端接受哪些类型的信息。

    Accept-Charset请求报头域用于指定客户端接受的字符集。

    Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。

    Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。

    Authorization请求报头域主要用于证明客户端有权查看某个资源。

    Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

    2、响应报头

    响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

    常用的响应报头

    Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。

    Server响应报头域包含了服务器用来处理请求的软件信息

    3. 实体报头

    请求和响应消息都可以传送一个实体。

    常用的实体报头

    Content-Encoding指示已经被应用到实体正文的附加内容的编码。

    Content-Language实体报头域描述了资源所用的自然语言。

    Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

    Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。

    Last-Modified实体报头域用于指示资源的最后修改日期和时间。

    Expires实体报头域给出响应过期的日期和时间。

    四、补充

    1、HTTP协议Content Lenth限制漏洞导致拒绝服务攻击

    使用POST方法时,可以设置ContentLenth来定义需要传送的数据长度,例如ContentLenth:999999999,在传送完成前,内 存不会释放,攻击者可以利用这个缺陷,连续向WEB服务器发送垃圾数据直至WEB服务器内存耗尽。这种攻击方法基本不会留下痕迹。

    2、为了提高用户使用浏览器时的性能,现代浏览器还支持并发的访问方式,浏览一个网页时同时建立多个连接,以迅速获得一个网页上的多个图标,这样能更快速完成整个网页的传输。HTTP1.1中提供了这种持续连接的方式,而下一代HTTP协议:HTTP-NG更增加了有关会话控制、丰富的内容协商等方式的支持,来提供更高效率的连接。

    五.Java利用HTTP协议实现联网和下载

    Url的请求连接(Get方式)

    String currentUrl=“http://www.myWeb.com/login.jsp?userName='Devin'&passWord='mypassword'”; //URL ?后面的内容为HTTP请求的正文

    URL url = new URL(currentUrl);

    HttpURLConnection httpurlconnection = url.openConnection();

    //下面的设置对应HTTP请求中的消息报头

    httpurlconnection.setRequestProperty("User-Agent",CommonValues.User_Agent);

    httpurlconnection.setRequestProperty("Accept",CommonValues.Accept);

    httpurlconnection.setRequestProperty("Accept-Charset",CommonValues.Accept_Charset);

    httpurlconnection.setRequestProperty("Accept-Language",CommonValues.Accept_Language);

    httpurlconnection.setRequestProperty("Connection",CommonValues.Connection);

    httpurlconnection.setRequestProperty("Keep-Alive",CommonValues.Keep_Alive);

    httpurlconnection.setConnectTimeout(CommonValues.ConnectionTimeOut);

    httpurlconnection.setReadTimeout(CommonValues.ReadTimeOut);

    httpurlconnection.connect();

    int responsecode = httpurlconnection.getResponseCode();

    if(responsecode == HttpURLConnection.HTTP_OK) //对应HTTP响应中状态行的响应码

    {

    //操作请求流,这里对应HTTP响应中的响应正文

    }

    if (httpurlconnection != null)

    {

    httpurlconnection.disconnect();

    }

    --------------------------------------------------------------------

    PS: 欢迎关注公众号"Devin说",会不定期更新Java相关技术知识。

    --------------------------------------------------------------------

    68f724bad5a33d9a9f6bd2ca7369ecb7.png

    展开全文
  • java URL协议处理

    千次阅读 2014-04-02 10:54:42
    URLConnection是一个协议处理器中的一个类,它是表示指向URL所指定的资源的活动连接。主要用于两个方面,一个是与服务器(特别是HTTP服务器)的交互,可以用来查看服务器发送的首部,设置连接的属性,设置客户端的请求...

    URLConnection是一个协议处理器中的一个类,它是表示指向URL所指定的资源的活动连接。主要用于两个方面,一个是与服务器(特别是HTTP服务器)的交互,可以用来查看服务器发送的首部,设置连接的属性,设置客户端的请求的首部等。利用它也可以实现POST和PUT方法来发送数据。另一个方面是Java的协议处理器机制的一部分。所谓的协议处理器就是将处理协议的细节从处理特定数据类型中分离出,会涉及到客户端与服务器端的交互,如生成正确的请求格式,解释与数据一起返回的首部等。


    获取URLConnection
       根据一个已经创建的URL来通过openConnection来打开生成一个URLConnection,虽然利用url来获取,其实内部调用的是URLStreamHandler的openConnection,该方法是一个抽象方法,它返回的URLConnection会根据协议的类型返回,倘若是一个http url则就会返回一个HTTPURLConnection。
       URL url=new URL("http://www.baidu.com");
       URLConnection uc=url.openConnection();
       此时该uc并没有连接,本地与远程主机是无法进行收发数据的,需要调用uc.connect()方法来建立连接。不过在使用getInputStream(),getHeaderField()等其它要求的时候会首先自动调用这个方法。
       利用此URLConnection可以很容易读取来自服务器端的数据,只要其getInputStream。

    URL和URLConnection的区别
    URLConnection提供了对于HTTP首部的访问
    URLConnection可以配置客户端向服务器端发送的请求参数即首部

    URLConnection可以利用POST,PUT等请求方法与服务器进行交互

    利用URL与URLConnection都可以向服务器发送HTTP请求。

    1,创建一个URL,传递一个字符串形式的HTTP请求,可以加上查询字符串,此时默认动作类型是get,也就是查询,从服务器返回一个资源,再通过getInputStream正式建立客户端与服务器之间的连接,将该HTTP请求发送到服务器端,建立必要的握手,由于HTTP是全双工的,此时就可以在这里面获取服务器的返回输出流。

    2,通过url的opentConnection获取一个指向url地址的活动连接,初次获取的时候是没有连接的,本地和远程根本不能收发数据,也就是没有socket来连接这台主机。要利用connect()方法来在本地和远程主机之间建立一个TCP socket连接,不过一般都是在使用getInputstream自动调用这个方法,使用getInputStream才是真正的进行发送HTTP的请求消息。
    读取服务器响应的首部
    对于服务器响应的首部,当然这里都是以HTTP服务器响应为准,可以来获取响应中的首部字段。
    Content-type,Content-length,Content-encoding,Date,Last-modified,Expires
    可以利用getContentType()来获取数据的MIME类型,判断字符编码,并且以正常的格式显示出,如
     String encoding="ISO-8859-1";//HTTP默认的编码方式
     URL u=new URL(url);
     URLConnection uc=u.openConnection();
      String type=uc.getContentType();
    //获取字符编码方式
    int star=type.indexOf("charset=");
    if(star!=-1)
              encoding=type.substring(star+8);
       System.out.println("CharSet:"+encoding);
       InputStream raw=uc.getInputStream();
        Reader r=new InputStreamReader(new BufferedInputStream(raw),encoding);
    利用getContentLength来获取二进制文件大小,从而来下载文件
    URLConnection uc=url.openConnection();
       String contentType=uc.getContentType();
    int contentLength=uc.getContentLength();
    if(contentType.startsWith("text/")||contentLength==-1)
       {
    thrownew IOException("This is not a binary file");
       }

       InputStream raw=new BufferedInputStream(uc.getInputStream());
    byte[] data=newbyte[contentLength];

    int bytesRead=0;
    int offset=0;
    while(offset<contentLength)
       {
         bytesRead=raw.read(data, offset, contentLength);
    if(bytesRead==-1)break;
         offset+=bytesRead;
       }

       raw.close();

    if(offset!=contentLength)
       {
    thrownew IOException("Only read "+offset+ "bytes;Expected "+contentLength+" bytes");
       }

    //根据URL中获取文件路径的名,将获取的流写入到本地
       String file=url.getFile();
    int start=file.lastIndexOf("/");
       String filename=file.substring(start+1);

       FileOutputStream fout=new FileOutputStream(filename);
       fout.write(data);
       fout.flush();
       fout.close();
    getHeaderField(String name);可以根据指定首部名来不区分大小写获取该名对应的值
    getHeaderFieldKey(int n)和getHeaderField(int n)依此返回首部中的名和值,很有用
         URL u=new URL(url);
         URLConnection uc=u.openConnection();

    for(int j=1;;j++)
         {
           String header=uc.getHeaderField(j);
    if(header==null)break;//skip the loop
           System.out.println(uc.getHeaderFieldKey(j)+":"+header);
         }

    配置连接
    所谓的配置主要就是定义了客户端如何向服务器做出请求。
    一般客户端在默认情况下doInput为true,表示可以接受来自服务器端发送的数据,这些必须在URLConnection连接之前设置。如果想要利用POST和PUT进行交互就必须要设置doOutpu为true,默认是false

    配置客户端发送的HTPP首部
    客户端进行服务器访问的时候,有些协议需要加上首部,配置一些名值对,可以通过setRequestProperty(name,value)设置,多个值之间利用逗号隔开。

    客户端利用POST来发送数据
    package com.urlconnection;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.net.URL;
    import java.net.URLConnection;

    //模拟表单提交处理
    publicclass FormPoster {

    private URL url;
    private QueryString query=new QueryString();

    //必须要保证是http协议
    public FormPoster(URL url)
     {
    if(!url.getProtocol().toUpperCase().startsWith("HTTP"))  
               {
    thrownew IllegalArgumentException("Posting only works for http urls");
               }
    this.url=url;
     }

    publicvoid add(String name,String value)
     {
       query.add(name, value);
     }

    public URL getURL()
     {
    returnthis.url;
     }

    public InputStream post()throws IOException
     {
       URLConnection uc=url.openConnection();
       uc.setDoOutput(true);
       Writer out=new OutputStreamWriter(uc.getOutputStream(),"ASCII");
    //POST行,Content-type和Content-length是由URLConnection发送的
    //只需要发送数据即可
       out.write(query.toString());
       out.write("\r\n\r\n");
       out.flush();
       out.close();

    return uc.getInputStream();
     }

    publicstaticvoid main(String[] args) {
    // TODO Auto-generated method stub
       String u="http://www.baidu.com";
       URL url=null;
    try{
           url=new URL(u);
       }catch(IOException e)
       {
       }
                    FormPoster poster=new FormPoster(url);
                    poster.add("hawk""fdafda");
                    poster.add("good morning""fdafa");

    try{
                       InputStream in=poster.post();

    //读取响应
                       InputStreamReader r=new InputStreamReader(in);
    int c;
    while((c=r.read())!=-1)
                       {
                        System.out.print((char)c);
                       }
                       in.close();
                    }catch(IOException ex)
                    {
                       System.err.println(ex);
                    }
     }

    }

    HTTPURLConnection
    这个是一个专门操作http URL的类,继承子URLConnection,主要有7个请求的方法
    利用setRequestMethod(String method)设置不同的请求方法,默认是get,区分大小写
    GET从服务器端获取数据
    POST向服务器端提交表单
    PUT上传文件至服务器
    HEAD,获取服务器端响应的头部
    OPTIONS,查询服务器支持哪些请求方法
    DELETE,删除服务器中的文件
    TRACE服务器返回客户端发送的HTTP首部,用于检测代理服务器对HTTP首部进行怎样修改
    服务器响应的格式如下:
    HTTP/1.1 200 OK
    ...
    这个类添加了两个方法
    getResponseMessage()获取响应码对应的消息,如OK
    getResponseCode()获取响应码,如200

    协议处理器
       协议处理器主要就是根据URL中的协议来找到合适的协议处理器来进行客户端与服务器端的交互。主要涉及四个类,具体类URL,抽象类URLConnection和URLStreamHandler,以及接口URLStreamHandlerFactory。协议处理器的流处理器总是根据指定的协议找到最适合的URLConnection
       要想自己建立协议处理器,需要编写两个URLConnection和URLStreamHandler的子类,然后创建一个URLStreamHandlerFactory。
    URLConnection子类主要处理与服务器交互,将服务器发送的数据转换为InputStream,将客户端发送的所有数据转换为OutputStream。URLStreamHandler子类主要将URL的字符串表示解析为各个部分,用这些部分来设置URL对象的各个部分,并且创建一个理解次URL协议的URLConnection。

    协议处理器的基本流程如下
    1 程序先利用字符串构建某一个协议的URL对象,在创建URL模式中,只会验证是否识别URL模式,而不会对其格式的正确性进行检查
    2 构造函数利用所传递的参数来确定URL的协议部分,如http
    3 URL()构造函数以如下方式尝试进行找到给定的URLStreamHandler
      a 如果以前使用过此协议,从缓存中获取URLStreamHandler
      b 否则,若设置了URLStreamHandlerFactory,将此字符串传递给工厂
      c 若两个都没有,则尝试实例化一个位于java.protocol.handler.pkgs属性列出的                  protocol.Handler的URLStreamHandler
      d 如果实例化失败,就尝试实例化一个位于sun.net.www.protocol中的protocol.Handler            的URLStreamHandler
      e 如果其中一个成功了,则设置属性字段handler字段。如果都不成功,则抛                        出MalformedURLException异常
    4 程序调用URL对象的openConnection方法
    5 URL会根据协议让URLStreamHandler返回一个适合于此URL的URLConnection
    6 使用URLConnection进行与远程资源的交互

    URLStreamHandler解析URL中字段的过程
    URL(String)-->URL(URL,String)-->URL(URL,String,String)-->URLStreamHandler.parseURL()
    -->URLStreamHandler.setURL()-->URL.set();
    要新建立一个URLStreamHandler一般只需要修改openConnection方法即可,根据需要来修改parseURL
    为每一个URLConnection子类重写一个connect方法,该方法包含了Socket的具体建立步骤。
    再利用URLStreamHandlerFactory来注册这些流处理器
    在信息交互系统设计中,不乏有自定义通讯协议设计。本章会介绍如何利用 java.net.URL 类来自定义协议。

           一般而言, URL 的格式是: protocol://[authority]hostname:port/resource?queryString 。 URL 类能够解析出 protocol、 hostname 、 port 等信息。 Protocol 决定了交互规范,通用的协议,比如 HTTP 、 File 、 FTP 等协议, JDK 自带了默认的通讯实现。当然,自定义实现是允许的。 Hostname 和 port 一般用于 Socket 或者基于 Socket 其他协议通讯方式。Resource 即资源上下文。可能读者利用 URL ,通过指定协议( protocol )来获取指定资源的读写,比如 JDK 内置了HTTP 、 File 、 FTP 等协议的处理方法。哪么 URL 的工作原理到底是怎么样的呢?

          在成功地构造 URL 实例之后, URL API 中定义了一个 openConnection() 方法,返回一个 java.net.URLConnection 抽象类型的实例。不过,这里 URL 对象是代理对象(组合了 其 对象),实际调用的是, java.net.URLStreamHandler 对象的 openConnection() 方法。

          java.net.URLStreamHandler 对象可以有两条途径得到:实现 java.net.URLStreamHandler ,或者实现java.net.URLStreamHandlerFactory 。

          java.net.URLStreamHandler 是一个工厂类,通过 openConnection(java.net.URL) 方法来创建 java.net.URLConnection的实例。 java.net.URLStreamHandler 实现灵活度很大,既可以通过不同 protocol 的 URL 实例,产生java.net.URLConnection 对象。还可以通过相同 protocol 的多个 URL 对象,来产生对象。通用性实现,一种协议对应一个java.net.URLStreamHandler 实现。比如,在 SUN JDK 中 sun.net.www.protocol 子包下面的多个 Handler 类就是很好的例子。如果读者有兴趣,可以去看看相关实现。

          1. 通过 java.net.URLStreamHandlerFactory 机制

          java.net.URLStreamHandlerFactory ,顾名思义,它是 java.net.URLStreamHandler 的工厂,即抽类工厂接口。通过调用 createURLStreamHandler(String protocol) 来创建 java.net.URLStreamHandler 对象。因此,建议java.net.URLStreamHandlerFactory 实现类应该采用 one protocol one hander 的模式, SUN JDK 也采用该模式。

         大致解了他们关系之后,再通过 UML Class diagram 来熟悉下:    

     

    (图 1 

     

         图 1 所示, URL 包含了名为 factory 的 URLStreamHandlerFactory 类对象和 handler 的 URLStreamHandler 的实例对象。对于 URL 而言, handler 对象是必须的,因为前面说到实际处理 openConnection() 方法是 handler 对象,而 factory并不是必须的。接下来,来分析这两个对象是如何和 URL 交互的。

         在 URL 的构造方法中,暂时不用关心协议字符串等参数,更多的关注于 URL context 和 URLStreamHandler 参数。URL 实例能够依赖于 URL context ,当 URLStreamHandler 参数为空的情况下,当前 URL 实例将会采用 URL context 的URLStreamHandler 成员对象。当 Context 和 URLStreamHandler 参数都为空的时。 URL 会调用 getURLStreamHandler( String) 方法,从而根据协议 (protocol) 获得协议 URLStreamHandler 对象。

         在 URL 底层实现中,最初会初始化一个 protocol 和 hander 键值关系的 Map 映射。如果找到已有的映射关系,立即返回 URLStreamHandler 对象(第一次是取不到 URLStreamHandler 对象的)。

         如果找不到的话,并且 URL 类中的类成员 URLStreamHandlerFactory 实例不为空的情况下,这个实例通过URL#setURLStreamHandlerFactory 方法来注册。 getURLStreamHandler 方法会调用这个类成员的createURLStreamHandler(String) 方法来创建 URLStreamHandler 实例。

     

     

     

    Java代码  收藏代码
    1. URL.setURLStreamHandlerFactory(new MyURLStreamHandlerFactory());  

    (代码 1 

    Java代码  收藏代码
    1. class MyURLStreamHandlerFactory implements URLStreamHandlerFactory{  
    2.         @Override  
    3.         public URLStreamHandler createURLStreamHandler(String protocol) {  
    4.             return null;  
    5.         }   
    6.           
    7. }  

    (代码 2 

     

     

     

          当 createURLStreamHandler 方法返回 null 的时候, URL 的 getURLStreamHandler 方法会采用 URLStreamHandler处理机制。

     

     

          2. 通过 java.net.URLStreamHandler 机制

          2.1. 实现类包路径定义

            通过 JVM 启动参数 -D java.protocol.handler.pkgs 来设置 URLStreamHandler 实现类的包路径,例如 -Djava.protocol.handler.pkgs=com.acme.protocol , 代表处理实现类皆在这个包下。如果需要多个包的话,那么使用“ |” 分割。比如 -D java.protocol.handler.pkgs=com.acme.protocol|com.acme.protocol2 。 SUN 的 JDK 内部实现类均是在sun.net.www.protocol. 包下,不必设置。 路径下的协议实现类,采用先定义先选择的原则 。

          2.2. 实现类的命名模式

          类的命名模式为 [package_path].[protocol].Handler ,比如默认实现” sun.net.www.protocol.[protocol].Handler”, 比如HTTP 协议的对应的处理类名为 -sun.net. www.protocol.http.Handler 。同样,自定义实现的处理类,例如, JDNI 协议实现类命名 com.acme.protocol.jndi.Handler 。

          2.3. 实现类必须又默认构造器。

          结合代码分析,如下:

    Java代码  收藏代码
    1. URL httpURL = new URL(null"http://www.google.com",URLStreamHandler)null);  
    2. URLConnection urlConn = httpURL.openConnection();  

     

    (代码 3 

     

          代码 3 中没有配置 URLStreamHandler 的类,并且代码 2 中工厂类没有实现了 HTTP 协议。这样, URL 会获取默认的 HTTP 处理类 sun.net. www.protocol.http.Handler 

          Java 1.5 开始支持网络代理的操作,因此 URLStreamHandler 实现类尽量覆盖 openConnection(URL) openConnection(URL,Proxy) 两个方法。

    展开全文
  • HTTP协议 URL

    2016-05-16 23:41:00
    http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的...HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下: http://host[":"port][abs_path] http表示要通...
  • HTTP协议的请求类型 GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常...
  • Java 获取 URL 资源类型

    2021-01-23 23:18:25
    URL 资源,特别是网页,一般是用 HTTP 协议来进行封装的,所以在HTTP 头部有一个 Content-Type 字段就是专门存放资源的类型的 废话少说,先上代码 import java.io.*; import java.net.*; import java.util.*; ...
  • 有段时间没有接触HTTP协议的各种细节了。花了半个小时快速baidu回忆一下其中的重要知识,写的有点简陋: 1. HTTP协议有GET, POST, DETETE, PUT等,工八种。其中针对REST风格的请求,常用的GET, POST, PUT,DETETE...
  • HTTP协议URL

    2014-01-02 10:37:11
    Http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,... HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:   http://[host][":"port][abs_path] 
  • HTTP协议详解之URL

    2019-05-21 14:32:00
    HTTP协议详解之URL篇 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层...HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_pat...
  • 如何根据一个流媒体地址URL判断对应的流媒体协议,比如RTMP、RTSP协议等。 解决 这里提供一个方法,可以直接拿来用。 func getProtocol(url string) (string, error) { if url != "" { index := strings....
  • HTTP协议URL-笔记

    2018-04-30 23:14:26
    HTTP(超文本传输协议)是一个基于请求与响应模式的、无...HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path]即:http://IP地址:端口号...
  • Ø2、在客户端,GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTMLHEADER内提交Ø3、对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取...
  • 抖音、快手、微信的跳转协议,进入直播间,扫一扫、进入用户页面等Activity, 我们可以用这些协议来打开app对应的功能,也可以同时传递所需要的参数(参数类型有提供)。
  • HTTP协议、URI和URL、报文首部

    千次阅读 2018-05-13 23:07:30
    URI就是由某个协议方案表示的资源的定位标识符,协议方案指的是访问资源所用的协议类型名称。 采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。标准的URI协议有30种左右。 2.URI...
  • 对于 Http协议,Loadrunner 脚本可以使用通用模板反复粘贴,只需要修改其中的 URL 和 传参,就可以完成一整个业务 2. Get 类型的接口 web_custom_request(  // 名称,最好用英文  "Hello",  // 接口的 ...
  • HTTP协议 (二) URL

    2017-05-09 18:38:16
    URI 和 URL的区别: URI:uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。 URL:uniform resource locator,统一资源...HTTP URL(URL是这一种特殊类型的URI,包含了用于查找某个资源的足够的信
  • 老罗视频学习Http协议。一.请求端客户端首先,新建一个java项目。新添加一个包com.http.get,在这个包下新添加一个HttpUrils类。具体内容如下:public class HttpUtils {//url地址,用这个地址创建URL对象。private ...
  • 什么是URL

    2019-01-16 18:54:00
    一、URL格式: http://127.0.0.1:80/index.html(完整格式) http://127.0.0.1/index.html (浏览器会自动添加... ...http:// URL协议类型 127.0.0.1 服务器IP地址(相当于生活中的地址) :80 服务器端口...
  • 在webKit中注册自定义协议类型

    千次阅读 2013-03-26 19:42:42
    我们也可以通过iurlsearchhook的思想实现在webkit中实现这样的机制,以实现第三方的协议和应用。不过印象中firefox已经实现了。 仿腾讯 QQ 和 Skype 通过URL触发自己的程序  2013-01-15 14:44:42| 分类: ...
  • 前言HTTP协议是一个文本协议,从框架上看格式很简单,其复杂在于请求和响应头的处理,以及body的内容编码,如果不是要做一个全面的HTTP服务器,使用少量的代码就能实现一...query#fragmentprotocol 是协议类型,比如...
  • 1.1 类型系统 AMQP的类型系统针对具有互操作性的数据的表示,定义了一个通常使用的原生的类型的集合...并且许多的编程语言的应用程序为了表示URL而定义了一个特定的类型。AMQP的类型 系统在当一个值要意图表示一个...
  • http url通过http协议,用于定位网络资源,是一种特殊类型的URI(统一资源定位) http_url = http://host[:port][abs_path[?query]] 说明: host:合法的主机名或ip地址 port:端口,缺省为80 abs_path...
  • HTML学习笔记——URL

    2018-08-24 11:33:57
    什么是URL? url:浏览器地址栏是中输入的地址;...http:// url协议类型,使用http协议; 127.0.0.1:服务器ip地址,相当于真实地址; :80 服务器端口号,相当于住址门牌号; index.html 需要访问的资...
  • 理解超文本传输协议

    2019-03-21 10:56:03
    理解超文本传输协议 ...协议类型: //服务器地址[:端口号]/路径 http: //wxsmile.com/user/1?gender=male 报文 请求报文 请求行(Method、path、HTTP version) Headers(Host、ContentType、Conten...
  • HTTP协议-MIME类型

    2016-06-12 19:59:00
    每一个 URL 都代表着一个资源对象,而当我们请求一个网页的时候,看似只请求了一个 URI(统一资源标识符),实际上这个网页可能包含多个 URI,例如图片资源的 URI 和视频资源的 URI 等。此时有些浏览器为了加快访问...
  • DLEPHI 实现的类型腾讯QQ和Skype通过URL触发自己的程序,可以自定义相关协议,并触发
  • 1.常见request的获取 ...常见request获取到项目路径的url: String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/"; request.getServerName();获取域名加
  • 其实浏览器的地址栏中输入的地址就是一个URL. http://127.0.0.1/index.html(浏览器会自动添加:80) ... URL拆分 http:// URL协议类型 127.0.0.1 服务器的ip地址 :80 服务器的端口号 index.htm...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,119
精华内容 847
关键字:

url协议类型