Проверить правильность URI
От: Аноним  
Дата: 06.10.06 15:37
Оценка:
Собственно, вопрос, я думаю, ясен. Есть ли какая-нибудь библиотека, чтобы можно было проверить правильность URI и распрасить его затем на части?

Что-то типа Uri класса в .NET, но под С/C++.
Re: Проверить правильность URI
От: artiz  
Дата: 06.10.06 15:49
Оценка: 1 (1) :)
Я пользовал boost::regex_match — подробности в коде:

typedef const char* CSTR;
typedef std::string STRING;

#define RE_URL_FOR_PARSE "^(([a-z0-9]+)\\/\\/)?)?"\
"(([a-z0-9_\\.%\\+\\-]+)(.*?)?)?@)?" /*username/password*/\
"([a-z0-9_%\\+\\.\\-]+)?([0-9]+))?" /*host/port*/\
"((\\/)?(.*?))?" /*path*/\
"(\\?(.*?))?" /*query*/\
"(#(.*?))?$" /*anchor*/

//////////////////////////////////////////////////////////////////////////

struct SaUrlInfo {
STRING sProtocol;
STRING sProtocolPost;
STRING sHost;
STRING sPort;
STRING sUserName;
STRING sPassword;
STRING sPath;
STRING sQuery;
STRING sAnchor;
};
//////////////////////////////////////////////////////////////////////////

SaUrlInfo CaWebUtils::parseUrl (CSTR url) {
using namespace boost;

SaUrlInfo res;
if (url == NULL)
return res;
STRING sUrl(url);

regex reUrl (RE_URL_FOR_PARSE, regex_constants::normal | regex_constants::icase );
smatch matches;

if( !regex_match(sUrl, matches, reUrl )) {
STRING sError("Invalid URL parts: " + sUrl);
CaLogger::error(sError.c_str ());
return res;
}

res.sProtocol = (matches[2].matched ? matches.str(2) : "");
res.sProtocolPost = (matches[3].matched ? matches.str(3) : "");
res.sUserName = (matches[5].matched ? matches.str(5) : "");
res.sPassword = (matches[7].matched ? matches.str(7) : "");
res.sHost = (matches[8].matched ? matches.str(8) : "");
res.sPort = (matches[10].matched ? matches.str(10) : "");
res.sPath = (matches[11].matched ? matches.str(11) : "");

// fix path for URL like "http://host?p=1"
if (res.sPath[0] != '/')
res.sPath.insert(0, "/");

res.sQuery = (matches[15].matched ? matches.str(15) : "");
res.sAnchor = (matches[17].matched ? matches.str(17) : "");

return res;
}
Re: Проверить правильность URI
От: remark Россия http://www.1024cores.net/
Дата: 08.10.06 15:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Собственно, вопрос, я думаю, ясен. Есть ли какая-нибудь библиотека, чтобы можно было проверить правильность URI и распрасить его затем на части?


А>Что-то типа Uri класса в .NET, но под С/C++.



AfxParseURL
InternetCrackUrl



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.