Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

XMLHttpRequest

XMLHttpRequest it's is a C++ library what are used to interact with servers. The library is very similar to XMLHttpRequest in AJAX and repeats its functionality as much as possible.

This library support only Hypertext Transfer Protocol Version 2 (HTTP/2).

Examples

Create a syncronious GET request:

auto method = std::string{"GET"};
auto url = std::string{"https://github.githubassets.com/images/mona-loading-dark.gif"};
XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","image/avif,image/webp,*/*");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("cache-control", "no-cache");
req.setRequestHeader("pragma", "no-cache");
req.setRequestHeader("host", "github.githubassets.com");
req.setRequestHeader("Sec-Fetch-Dest", "image");
req.setRequestHeader("Sec-Fetch-Mode", "no-cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.open();

Create a syncronious POST request:

XMLHttpRequest req(method, url, false);
req.setRequestHeader("accept","*/*");
req.setRequestHeader("accept-language", "en-US,en;q=0.5");
req.setRequestHeader("accept-encoding", "gzip, deflate, br");
req.setRequestHeader("content-length", "0");
req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("host", "httpbin.org");
req.setRequestHeader("origin","https://httpbin.org/post");
req.setRequestHeader("refer","https://httpbin.org/post");
req.setRequestHeader("Sec-Fetch-Dest", "empty");
req.setRequestHeader("Sec-Fetch-Mode", "cors");
req.setRequestHeader("Sec-Fetch-Site", "cross-site");
req.setRequestHeader("user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0");
req.timeout(3000);
req.setOnReadyCallback([&](auto&& result) {
auto [httpRq, httpRp] = result;
spdlog::info("{} Status code: {}", pthread_self(), httpRp->statusCode());
spdlog::info("{} Host: {} Method: {} Scheme: {} Response data size: {} ", pthread_self(),
httpRq->host(), httpRq->method(), httpRq->scheme(), httpRp->contentLength());
// Print headersspdlog::info("Raw response headers:\r\n {} ", req.getAllResponseHeaders()); });
req.open();
req.send();

XMLHttpRequest methods description:

XMLHttpRequest()

The constructor initializes an XMLHttpRequest. It must be called before any other method calls.

XMLHttpRequest(std::string &&method, std::string &&url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

XMLHttpRequest(const std::string_view method, const std::string_view url, bool async = false);

The constructor initializes an XMLHttpRequest with method, url and it type (synchronous by default)

abort()

Aborts the request if it has already been sent.

getAllResponseHeaders()

Returns all the response headers, separated by CRLF, as a string, or empty string if no response has been received.

getResponseHeader(const std::string &header)

Returns the string containing the text of the specified header, or empty string if either the response has not yet been received or the header doesn't exist in the response.

boolopen()

Initializes a request.

voidopen(std::string &&method, std::string &&url)

Initializes a request in ASYNC mode. The HTTP request method to use "GET" or "POST".

voidopen(std::string &&method, std::string &&url, bool async)

Initializes a request with async flag. The HTTP request method to use "GET" or "POST".

voidopen(std::string method, std::string uri, bool async, const std::string user, const std::string password)

Initializes a request with async flag, user and password for "Authorization" request header. The HTTP request method to use "GET" or "POST".

voidoverrideMimeType(std::string &&mime)

Overrides the MIME type returned by the server.

voidsend()

Sends the request. If the request is synchronous (which is the default), this method returns as soon as the request is sent.

voidsend(onReadyCallback &&)

Sends the request. Call callback function invokes when request is recive full answer from server.

voidsend(std::string &&body)

Sends the POST request with data represented as strig.

voidsetRequestHeader(const std::string &header, const std::string &value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidsetRequestHeader(std::string &&header, std::string &&value)

Sets the value of an HTTP request header. You must call setRequestHeader() before send().

voidopenRequest(std::string method, std::string url, bool async, std::string user, std::string password)

Same as open(std::string method, std::string uri, bool async, const std::string user, const std::string password)

boolsetOnReadyCallback(onReadyCallback &&cb) noexcept

Sets a callback function that is called when a request is executed

boolsetOnStateChangedCallback(onStateChangeCallback &&cb) noexcept

Sets a callback function that is called when the request changes its state

voidsetOnTimeoutCallback(onTimeoutCallback &&) noexcept

Sets a callback function that is called when a request timeout is out.

voidtimeout(constsize_t milliseconds) noexcept

Is an size_t representing the number of milliseconds a request can take before automatically being terminated.

size_ttimeout() const

Return the number of milliseconds a request can take before automatically being terminated.

std::shared_ptr<Response> response() const

If response sucessful the response method returns the response's body content as a pointer of class class Response, what cointains status code of request, headers, content length and data. Otherwise method return nullptr.The success of the operation depending on the value of the request's responseType property.

About

XMLHttpRequest it's a C++ library what are used to interact with servers via HTTP2 protocol

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages