📄 url.cpp
字号:
/* URL handling */#include <iostream>#include <string>#include "Url.h"/* Is X "."? */#define DOTP(x) ((*(x) == '.') && (!*(x + 1)))/* Is X ".."? */#define DDOTP(x) ((*(x) == '.') && (*(x + 1) == '.') && (!*(x + 2)))struct scheme_data{ char *leading_string; int default_port; int enabled;};/* Supported schemes: */static struct scheme_data supported_schemes[] ={ { "http://", DEFAULT_HTTP_PORT, 1 }, { "ftp://", DEFAULT_FTP_PORT, 1 }, /* SCHEME_INVALID */ { NULL, -1, 0 }};/* Returns the scheme type if the scheme is supported, or SCHEME_INVALID if not. */void CUrl::ParseScheme (const char *url){ int i; for (i = 0; supported_schemes[i].leading_string; i++) if (0 == strncasecmp (url, supported_schemes[i].leading_string, strlen (supported_schemes[i].leading_string))) { if (supported_schemes[i].enabled){ this->m_eScheme = (enum url_scheme) i; return; }else{ this->m_eScheme = SCHEME_INVALID; return; } } this->m_eScheme = SCHEME_INVALID; return;}/* scheme://user:pass@host[:port]... * ^ * We attempt to break down the URL into the components path, * params, query, and fragment. They are ordered like this: * scheme://host[:port][/path][;params][?query][#fragment] */bool CUrl::ParseUrl(string strUrl){ string::size_type idx; this->ParseScheme(strUrl.c_str()); if( this->m_eScheme != SCHEME_HTTP ) return false; // get host name this->m_sHost = strUrl.substr(7); idx = m_sHost.find('/'); if(idx != string::npos){ m_sHost = m_sHost.substr(0,idx); } this->m_sUrl = strUrl; return true;}CUrl::CUrl(){ this->m_sUrl = ""; this->m_eScheme= SCHEME_INVALID; this->m_sHost = ""; this->m_nPort = DEFAULT_HTTP_PORT; this->m_sPath = ""; this->m_sParams = ""; this->m_sQuery = ""; this->m_sFragment = ""; this->m_sDir = ""; this->m_sFile = ""; this->m_sUser = ""; this->m_sPasswd = "";}CUrl::~CUrl(){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -