This library provides:
- A
skyr::url
class that implements a generic URL parser, compatible with the WhatWG URL specification - URL serialization and comparison
- Percent encoding and decoding functions
- IDNA and Punycode functions for domain name parsing
This project requires the availability of a C++17 compliant compiler and standard library.
From a terminal, execute the following sequence of commands:
> mkdir _build
> cd _build
> cmake ..
> make -j4
> mkdir _build
> cd _build
> cmake ..
The Visual Studio solution is available in Skyr.sln
.
ctest
Parses a string, "https://example.org/💩", without using a base URL:
#include <skyr/url.hpp>
#include <iostream>
int main(int argc, char *argv[]) {
auto url = skyr::make_url("http://example.org/\xf0\x9f\x92\xa9");
std::cout << url.value().pathname() << std::endl;
}
Gives the output: /%F0%9F%92%A9
This gives an error if the input, "/🍣🍺", is not an absolute-URL-with-fragment-string:
#include <skyr/url.hpp>
#include <iostream>
int main(int argc, char *argv[]) {
auto url = skyr::make_url("\xf0\x9f\x8d\xa3\xf0\x9f\x8d\xba");
if (!url) {
std::cerr << "Parsing failed: " << url.error().message() << std::endl;
}
}
This gives the output: Parsing failed: Not an absolute URL with fragment
Parses a string, "🏳️🌈", using a base URL, "https://example.org/":
#include <skyr/url.hpp>
#include <iostream>
int main(int argc, char *argv[]) {
auto base = skyr::make_url("https://example.org/");
auto url = skyr::make_url("\xf0\x9f\x8f\xb3\xef\xb8\x8f\xe2\x80\x8d\xf0\x9f\x8c\x88", base.value());
if (url) {
std::cout << url.value().href() << std::endl;
}
}
This gives the output: https://example.org/%F0%9F%8F%B3%EF%B8%8F%E2%80%8D%F0%9F%8C%88
This name was chosen by a random project name generator, which itself was randomly chosen.
This library uses optional, expected and utfcpp.
The tests are built using Google Test.
This library has been tested using the following platforms and compilers:
Linux:
- GCC 7
- GCC 8
- Clang 6
MacOS:
- Clang 6
Windows:
- Microsoft Visual C++ 2017
This library is released under the Boost Software License (please see http://boost.org/LICENSE_1_0.txt or the accompanying LICENSE_1_0.txt file for the full text.
Any questions about this library can be addressed to the cpp-netlib developers mailing list. Issues can be filed using Github at http://github.com/cpp-netlib/uri/issues.