📄 httpuri.java
字号:
case '[': { state = IPV6; break; } } continue; } case IPV6: { switch (c) { case '/': { throw new IllegalArgumentException("No closing ']' for " + StringUtil.toString(_raw,offset,length,URIUtil.__CHARSET)); } case ']': { state = AUTH; break; } } continue; } case PORT: { if (c=='/') { m=s; _path=m; if (_port<=_authority) _port=_path; state=PATH; } continue; } case PATH: { switch (c) { case ';': { _param = s; state = PARAM; break; } case '?': { _param = s; _query = s; state = QUERY; break; } case '#': { _param = s; _query = s; _fragment = s; break state; } } continue; } case PARAM: { switch (c) { case '?': { _query = s; state = QUERY; break; } case '#': { _query = s; _fragment = s; break state; } } continue; } case QUERY: { if (c=='#') { _fragment=s; break state; } continue; } case ASTERISK: { throw new IllegalArgumentException("only '*'"); } } } } private String toUtf8String(int offset,int length) { _utf8b.reset(); _utf8b.append(_raw,offset,length); return _utf8b.toString(); } public String getScheme() { if (_scheme==_authority) return null; int l=_authority-_scheme; if (l==5 && _raw[_scheme]=='h' && _raw[_scheme+1]=='t' && _raw[_scheme+2]=='t' && _raw[_scheme+3]=='p' ) return HttpSchemes.HTTP; if (l==6 && _raw[_scheme]=='h' && _raw[_scheme+1]=='t' && _raw[_scheme+2]=='t' && _raw[_scheme+3]=='p' && _raw[_scheme+4]=='s' ) return HttpSchemes.HTTPS; return toUtf8String(_scheme,_authority-_scheme-1); } public String getAuthority() { if (_authority==_path) return null; return toUtf8String(_authority,_path-_authority); } public String getHost() { if (_host==_port) return null; return toUtf8String(_host,_port-_host); } public int getPort() { if (_port==_path) return -1; return TypeUtil.parseInt(_raw, _port+1, _path-_port-1,10); } public String getPath() { if (_path==_param) return null; return toUtf8String(_path,_param-_path); } public String getDecodedPath() { if (_path==_param) return null; int length = _param-_path; byte[] bytes=null; int n=0; for (int i=_path;i<_param;i++) { byte b = _raw[i]; if (b=='%' && (i+2)<_param) { b=(byte)(0xff&TypeUtil.parseInt(_raw,i+1,2,16)); i+=2; } else if (bytes==null) { n++; continue; } if (bytes==null) { bytes=new byte[length]; for (int j=0;j<n;j++) bytes[j]=_raw[_path+j]; } bytes[n++]=b; } if (bytes==null) return toUtf8String(_path,length); _utf8b.reset(); _utf8b.append(bytes,0,n); return _utf8b.toString(); } public String getPathAndParam() { if (_path==_query) return null; return toUtf8String(_path,_query-_path); } public String getCompletePath() { if (_path==_end) return null; return toUtf8String(_path,_end-_path); } public String getParam() { if (_param==_query) return null; return toUtf8String(_param+1,_query-_param-1); } public String getQuery() { if (_query==_fragment) return null; return toUtf8String(_query+1,_fragment-_query-1); } public String getQuery(String encoding) { if (_query==_fragment) return null; return StringUtil.toString(_raw,_query+1,_fragment-_query-1,encoding); } public boolean hasQuery() { return (_fragment>_query); } public String getFragment() { if (_fragment==_end) return null; return toUtf8String(_fragment+1,_end-_fragment-1); } public void decodeQueryTo(MultiMap parameters) { if (_query==_fragment) return; _utf8b.reset(); UrlEncoded.decodeUtf8To(_raw,_query+1,_fragment-_query-1,parameters,_utf8b); } public void decodeQueryTo(MultiMap parameters, String encoding) throws UnsupportedEncodingException { if (_query==_fragment) return; if (encoding==null || StringUtil.isUTF8(encoding)) UrlEncoded.decodeUtf8To(_raw,_query+1,_fragment-_query-1,parameters); else UrlEncoded.decodeTo(toUtf8String(_query+1,_fragment-_query-1),parameters,encoding); } public void clear() { _scheme=_authority=_host=_port=_path=_param=_query=_fragment=_end=0; _raw=__empty; _rawString=""; } public String toString() { if (_rawString==null) _rawString=toUtf8String(_scheme,_end-_scheme); return _rawString; } public void writeTo(Utf8StringBuffer buf) { buf.append(_raw,_scheme,_end-_scheme); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -