⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http.cxx

📁 pwlib源码库
💻 CXX
📖 第 1 页 / 共 3 页
字号:
        port = (WORD)uphp.Mid(pos+1).AsUnsigned();        portSupplied = TRUE;      }      if (hostname.IsEmpty() && schemeInfo->defaultHostToLocal)        hostname = PIPSocket::GetHostName();    }  }  if (schemeInfo->hasQuery) {    // chop off any trailing query    pos = url.Find('?');    if (pos != P_MAX_INDEX) {      SplitQueryVars(url(pos+1, P_MAX_INDEX), queryVars);      url.Delete(pos, P_MAX_INDEX);    }  }  if (schemeInfo->hasParameters) {    // chop off any trailing parameters    pos = url.Find(';');    if (pos != P_MAX_INDEX) {      SplitVars(url(pos+1, P_MAX_INDEX), paramVars, ';', '=');      url.Delete(pos, P_MAX_INDEX);    }  }  if (schemeInfo->hasFragments) {    // chop off any trailing fragment    pos = url.Find('#');    if (pos != P_MAX_INDEX) {      fragment = UntranslateString(url(pos+1, P_MAX_INDEX), PathTranslation);      url.Delete(pos, P_MAX_INDEX);    }  }  if (schemeInfo->hasPath)    SetPathStr(url);   // the hierarchy is what is left  else {  // if the rest of the URL isn't a path, then we are finished!    pathStr = UntranslateString(url, PathTranslation);    Recalculate();  }  if (port == 0 && schemeInfo->defaultPort != 0 && !relativePath) {    // Yes another horrible, horrible special case!    if (scheme == "h323" && paramVars("type") == "gk")      port = DEFAULT_H323RAS_PORT;    else      port = schemeInfo->defaultPort;    Recalculate();  }  return TRUE;}PFilePath PURL::AsFilePath() const{  //if (scheme != SchemeTable[FILE_SCHEME].name)  //  return PString::Empty();  if (scheme != FILE_SCHEME)    return PString::Empty();  PStringStream str;  if (relativePath) {    for (PINDEX i = 0; i < path.GetSize(); i++) {      if (i > 0)        str << PDIR_SEPARATOR;      str << path[i];    }  }  else {    if (hostname != "localhost")      str << PDIR_SEPARATOR << hostname;    for (PINDEX i = 0; i < path.GetSize(); i++)      str << PDIR_SEPARATOR << path[i];  }  return str;}PString PURL::AsString(UrlFormat fmt) const{  if (fmt == FullURL)    return urlString;  if (scheme.IsEmpty())    return PString::Empty();  //const schemeStruct * schemeInfo = GetSchemeInfo(scheme);  //if (schemeInfo == NULL)  //  schemeInfo = &SchemeTable[PARRAYSIZE(SchemeTable)-1];  const PURLScheme * schemeInfo = PFactory<PURLScheme>::CreateInstance(scheme);  if (schemeInfo == NULL)    schemeInfo = PFactory<PURLScheme>::CreateInstance(DEFAULT_SCHEME);  return schemeInfo->AsString(fmt, *this);}PString PURL::LegacyAsString(PURL::UrlFormat fmt, const PURLLegacyScheme * schemeInfo) const{  PStringStream str;  PINDEX i;  if (fmt == HostPortOnly) {    if (schemeInfo->hasHostPort && hostname.IsEmpty())      return str;    str << scheme << ':';    if (relativePath) {      if (schemeInfo->relativeImpliesScheme)        return PString::Empty();      return str;    }    if (schemeInfo->hasPath && schemeInfo->hasHostPort)      str << "//";    if (schemeInfo->hasUsername) {      if (!username) {        str << TranslateString(username, LoginTranslation);        if (schemeInfo->hasPassword && !password)          str << ':' << TranslateString(password, LoginTranslation);        str << '@';      }    }    if (schemeInfo->hasHostPort) {      if (hostname.Find(':') != P_MAX_INDEX)        str << '[' << hostname << ']';      else        str << hostname;    }    if (schemeInfo->defaultPort != 0) {      if (port != schemeInfo->defaultPort || portSupplied)        str << ':' << port;    }    return str;  }  // URIOnly and PathOnly  if (schemeInfo->hasPath) {    for (i = 0; i < path.GetSize(); i++) {      if (i > 0 || !relativePath)        str << '/';      str << TranslateString(path[i], PathTranslation);    }  }  else    str << TranslateString(pathStr, PathTranslation);  if (fmt == URIOnly) {    if (!fragment)      str << "#" << TranslateString(fragment, PathTranslation);    for (i = 0; i < paramVars.GetSize(); i++) {      str << ';' << TranslateString(paramVars.GetKeyAt(i), QueryTranslation);      PString data = paramVars.GetDataAt(i);      if (!data)        str << '=' << TranslateString(data, QueryTranslation);    }    if (!queryVars.IsEmpty())      str << '?' << GetQuery();  }  return str;}void PURL::SetScheme(const PString & s){  scheme = s;  Recalculate();}void PURL::SetUserName(const PString & u){  username = u;  Recalculate();}void PURL::SetPassword(const PString & p){  password = p;  Recalculate();}void PURL::SetHostName(const PString & h){  hostname = h;  Recalculate();}void PURL::SetPort(WORD newPort){  port = newPort;  Recalculate();}void PURL::SetPathStr(const PString & p){  pathStr = p;  path = pathStr.Tokenise("/", TRUE);  if (path.GetSize() > 0 && path[0].IsEmpty())     path.RemoveAt(0);  for (PINDEX i = 0; i < path.GetSize(); i++) {    path[i] = UntranslateString(path[i], PathTranslation);    if (i > 0 && path[i] == ".." && path[i-1] != "..") {      path.RemoveAt(i--);      path.RemoveAt(i--);    }  }  Recalculate();}void PURL::SetPath(const PStringArray & p){  path = p;  pathStr.MakeEmpty();  for (PINDEX i = 0; i < path.GetSize(); i++)    pathStr += '/' + path[i];  Recalculate();}PString PURL::GetParameters() const{  PStringStream str;  for (PINDEX i = 0; i < paramVars.GetSize(); i++) {    if (i > 0)      str << ';';    str << paramVars.GetKeyAt(i);    PString data = paramVars.GetDataAt(i);    if (!data)      str << '=' << data;  }  return str;}void PURL::SetParameters(const PString & parameters){  SplitVars(parameters, paramVars, ';', '=');  Recalculate();}void PURL::SetParamVars(const PStringToString & p){  paramVars = p;  Recalculate();}void PURL::SetParamVar(const PString & key, const PString & data){  if (data.IsEmpty())    paramVars.RemoveAt(key);  else    paramVars.SetAt(key, data);  Recalculate();}PString PURL::GetQuery() const{  PStringStream str;  for (PINDEX i = 0; i < queryVars.GetSize(); i++) {    if (i > 0)      str << '&';    str << TranslateString(queryVars.GetKeyAt(i), QueryTranslation)        << '='        << TranslateString(queryVars.GetDataAt(i), QueryTranslation);  }  return str;}void PURL::SetQuery(const PString & queryStr){  SplitQueryVars(queryStr, queryVars);  Recalculate();}void PURL::SetQueryVars(const PStringToString & q){  queryVars = q;  Recalculate();}void PURL::SetQueryVar(const PString & key, const PString & data){  if (data.IsEmpty())    queryVars.RemoveAt(key);  else    queryVars.SetAt(key, data);  Recalculate();}BOOL PURL::OpenBrowser(const PString & url){#ifdef WIN32  SHELLEXECUTEINFO sei;  ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));  sei.cbSize = sizeof(SHELLEXECUTEINFO);  sei.lpVerb = TEXT("open"); #ifndef _WIN32_WCE   sei.lpFile = url; #else   USES_CONVERSION;   sei.lpFile = A2T(url); #endif // _WIN32_WCE  if (ShellExecuteEx(&sei) != 0)    return TRUE;#ifndef _WIN32_WCE  MessageBox(NULL, "Unable to open page"&url, PProcess::Current().GetName(), MB_TASKMODAL);#else  MessageBox(NULL, _T("Unable to open page"), A2T(PProcess::Current().GetName()), MB_APPLMODAL);#endif // _WIN32_WCE#endif // WIN32  return FALSE;}void PURL::Recalculate(){  //if (scheme.IsEmpty())  //  scheme = SchemeTable[DEFAULT_SCHEME].name;  if (scheme.IsEmpty())    scheme = DEFAULT_SCHEME;  urlString = AsString(HostPortOnly) + AsString(URIOnly);}//////////////////////////////////////////////////////////////////////////////// PHTTPstatic char const * const HTTPCommands[PHTTP::NumCommands] = {  // HTTP 1.0 commands  "GET", "HEAD", "POST",  // HTTP 1.1 commands  "PUT",  "DELETE", "TRACE", "OPTIONS",  // HTTPS command  "CONNECT"};const char * const PHTTP::AllowTag           = "Allow";const char * const PHTTP::AuthorizationTag   = "Authorization";const char * const PHTTP::ContentEncodingTag = "Content-Encoding";const char * const PHTTP::ContentLengthTag   = "Content-Length";const char * const PHTTP::ContentTypeTag     = "Content-Type";const char * const PHTTP::DateTag            = "Date";const char * const PHTTP::ExpiresTag         = "Expires";const char * const PHTTP::FromTag            = "From";const char * const PHTTP::IfModifiedSinceTag = "If-Modified-Since";const char * const PHTTP::LastModifiedTag    = "Last-Modified";const char * const PHTTP::LocationTag        = "Location";const char * const PHTTP::PragmaTag          = "Pragma";const char * const PHTTP::PragmaNoCacheTag   = "no-cache";const char * const PHTTP::RefererTag         = "Referer";const char * const PHTTP::ServerTag          = "Server";const char * const PHTTP::UserAgentTag       = "User-Agent";const char * const PHTTP::WWWAuthenticateTag = "WWW-Authenticate";const char * const PHTTP::MIMEVersionTag     = "MIME-Version";const char * const PHTTP::ConnectionTag      = "Connection";const char * const PHTTP::KeepAliveTag       = "Keep-Alive";const char * const PHTTP::TransferEncodingTag= "Transfer-Encoding";const char * const PHTTP::ChunkedTag         = "chunked";const char * const PHTTP::ProxyConnectionTag = "Proxy-Connection";const char * const PHTTP::ProxyAuthorizationTag = "Proxy-Authorization";const char * const PHTTP::ProxyAuthenticateTag = "Proxy-Authenticate";const char * const PHTTP::ForwardedTag       = "Forwarded";const char * const PHTTP::SetCookieTag       = "Set-Cookie";const char * const PHTTP::CookieTag          = "Cookie";PHTTP::PHTTP()  : PInternetProtocol("www 80", NumCommands, HTTPCommands){}PINDEX PHTTP::ParseResponse(const PString & line){  PINDEX endVer = line.Find(' ');  if (endVer == P_MAX_INDEX) {    lastResponseInfo = "Bad response";    lastResponseCode = PHTTP::InternalServerError;    return 0;  }  lastResponseInfo = line.Left(endVer);  PINDEX endCode = line.Find(' ', endVer+1);  lastResponseCode = line(endVer+1,endCode-1).AsInteger();  if (lastResponseCode == 0)    lastResponseCode = PHTTP::InternalServerError;  lastResponseInfo &= line.Mid(endCode);  return 0;}// End Of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -