

{"id":14213,"date":"2023-07-09T06:46:02","date_gmt":"2023-07-09T11:46:02","guid":{"rendered":"https:\/\/rud.is\/b\/?p=14213"},"modified":"2023-07-11T06:53:20","modified_gmt":"2023-07-11T11:53:20","slug":"new-r-package-hhhash","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/","title":{"rendered":"New R Package For HTTP Headers Hashing"},"content":{"rendered":"<style>\nhyphens: manual !important;\n<\/style>\n<p>HTTP Headers Hashing (<a href=\"https:\/\/www.foo.be\/2023\/07\/HTTP-Headers-Hashing_HHHash\">HHHash<\/a>) is a technique developed by Alexandre Dulaunoy to gen&shy;erate a fingerprint of an HTTP server based on the headers it returns. It employs one-way hashing to generate a hash value from the list of header keys returned by the server. The HHHash value is calculated by concatenating the list of headers returned, ordered by sequence, with each header value separated by a colon. The SHA256 of this concatenated list is then taken to generate the HHHash value. HHHash incorporates a version identifier to enable updates to new hashing functions.<\/p>\n<p>While effective, HHHash&#8217;s performance relies heavily on the characteristics of the HTTP requests, so correlations are typically only established using the same crawler parameters. Locality-sensitive hashing (LSH) could be used to calculate distances between sets of headers for more efficient comparisons. There are some limitations with some LSH algorithms (such as the need to pad content to a minimum byte length) that make the initial use of SHA256 hashes a bit more straightforward.<\/p>\n<p>Alexandre made a <a href=\"https:\/\/github.com\/hrbrmstr\/hhhash\">Python library<\/a> for it, and I cranked out an <a href=\"https:\/\/github.com\/hrbrmstr\/hhhash\">R package<\/a> for it as well.<\/p>\n<p>There are three functions exposed by {hhhash}:<\/p>\n<ul>\n<li><code>build_hash_from_response<\/code>: Build a hash from headers in a curl<br \/>\nresponse object<\/li>\n<li><code>build_hash_from_url<\/code>: Build a hash from headers retrieved from a URL<\/li>\n<li><code>hash_headers<\/code>: Build a hash from a vector of HTTP header keys<\/li>\n<\/ul>\n<p>The <code>build_hash_from_url<\/code> function relies on {curl} vs {httr} since {httr} uses <code>curl::parse_headers()<\/code> which (rightfully so) lowercases the header keys. We need to preserve both order and case for the hash to be useful.<\/p>\n<p>Here is some sample usage:<\/p>\n<pre><code class=\"language-r\">remotes::install_github(\"hrbrmstr\/hhhash\")\n\nlibrary(hhhash)\n\nbuild_hash_from_url(\"https:\/\/www.circl.lu\/\")\n## [1] \"hhh:1:78f7ef0651bac1a5ea42ed9d22242ed8725f07815091032a34ab4e30d3c3cefc\"\n\nres &lt;- curl::curl_fetch_memory(\"https:\/\/www.circl.lu\/\", curl::new_handle())\n\nbuild_hash_from_response(res)\n## [1] \"hhh:1:78f7ef0651bac1a5ea42ed9d22242ed8725f07815091032a34ab4e30d3c3cefc\"\n\nc(\n  \"Date\", \"Server\", \"Strict-Transport-Security\",\n  \"Last-Modified\", \"ETag\", \"Accept-Ranges\",\n  \"Content-Length\", \"Content-Security-Policy\",\n  \"X-Content-Type-Options\", \"X-Frame-Options\",\n  \"X-XSS-Protection\", \"Content-Type\"\n) -&gt; keys\n\nhash_headers(keys)\n## [1] \"hhh:1:78f7ef0651bac1a5ea42ed9d22242ed8725f07815091032a34ab4e30d3c3cefc\"\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>HTTP Headers Hashing (HHHash) is a technique developed by Alexandre Dulaunoy to gen&shy;erate a fingerprint of an HTTP server based on the headers it returns. It employs one-way hashing to generate a hash value from the list of header keys returned by the server. The HHHash value is calculated by concatenating the list of headers [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[91],"tags":[],"class_list":["post-14213","post","type-post","status-publish","format-standard","hentry","category-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>New R Package For HTTP Headers Hashing - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New R Package For HTTP Headers Hashing - rud.is\" \/>\n<meta property=\"og:description\" content=\"HTTP Headers Hashing (HHHash) is a technique developed by Alexandre Dulaunoy to gen&shy;erate a fingerprint of an HTTP server based on the headers it returns. It employs one-way hashing to generate a hash value from the list of header keys returned by the server. The HHHash value is calculated by concatenating the list of headers [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-09T11:46:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-11T11:53:20+00:00\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"New R Package For HTTP Headers Hashing\",\"datePublished\":\"2023-07-09T11:46:02+00:00\",\"dateModified\":\"2023-07-11T11:53:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/\"},\"wordCount\":266,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/\",\"name\":\"New R Package For HTTP Headers Hashing - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"datePublished\":\"2023-07-09T11:46:02+00:00\",\"dateModified\":\"2023-07-11T11:53:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2023\\\/07\\\/09\\\/new-r-package-hhhash\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New R Package For HTTP Headers Hashing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rud.is\\\/b\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\\\/\\\/rud.is\"],\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/author\\\/hrbrmstr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New R Package For HTTP Headers Hashing - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/","og_locale":"en_US","og_type":"article","og_title":"New R Package For HTTP Headers Hashing - rud.is","og_description":"HTTP Headers Hashing (HHHash) is a technique developed by Alexandre Dulaunoy to gen&shy;erate a fingerprint of an HTTP server based on the headers it returns. It employs one-way hashing to generate a hash value from the list of header keys returned by the server. The HHHash value is calculated by concatenating the list of headers [&hellip;]","og_url":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/","og_site_name":"rud.is","article_published_time":"2023-07-09T11:46:02+00:00","article_modified_time":"2023-07-11T11:53:20+00:00","author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"New R Package For HTTP Headers Hashing","datePublished":"2023-07-09T11:46:02+00:00","dateModified":"2023-07-11T11:53:20+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/"},"wordCount":266,"commentCount":4,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/","url":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/","name":"New R Package For HTTP Headers Hashing - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"datePublished":"2023-07-09T11:46:02+00:00","dateModified":"2023-07-11T11:53:20+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2023\/07\/09\/new-r-package-hhhash\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"New R Package For HTTP Headers Hashing"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-3Hf","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":12684,"url":"https:\/\/rud.is\/b\/2020\/03\/04\/catchpole-redux-and-hashing-files-websites-with-ssdeepr\/","url_meta":{"origin":14213,"position":0},"title":"{catchpole} Redux and Hashing Files &#038; Websites with {ssdeepr}","author":"hrbrmstr","date":"2020-03-04","format":false,"excerpt":"\u00dcber Tuesday has come and almost gone (some state results will take a while to coalesce) and I'm relieved to say that {catchpole} did indeed work, with the example code from before producing this on first run: If we tweak the buffer space around the squares, I think the cartogram\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2020\/03\/catchpole-white.png?fit=1200%2C855&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2020\/03\/catchpole-white.png?fit=1200%2C855&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2020\/03\/catchpole-white.png?fit=1200%2C855&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2020\/03\/catchpole-white.png?fit=1200%2C855&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2020\/03\/catchpole-white.png?fit=1200%2C855&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":12060,"url":"https:\/\/rud.is\/b\/2019\/03\/05\/heads-up-roll-your-own-http-headers-investigations-with-the-hdrs-package\/","url_meta":{"origin":14213,"position":1},"title":"Head&#8217;s Up! Roll Your Own HTTP Headers Investigations with the &#8216;hdrs&#8217; Package","author":"hrbrmstr","date":"2019-03-05","format":false,"excerpt":"I blathered alot about HTTP headers in the last post. In the event you wanted to dig deeper I threw together a small package that will let you grab HTTP headers from a given URL and take a look at them. The README has examples for most things but we'll\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3784,"url":"https:\/\/rud.is\/b\/2015\/11\/11\/using-monetdblite-with-real-world-csv-files\/","url_meta":{"origin":14213,"position":2},"title":"Using MonetDB[Lite] with real-world CSV files","author":"hrbrmstr","date":"2015-11-11","format":false,"excerpt":"[MonetDBLite](https:\/\/www.monetdb.org\/blog\/monetdblite-r) (for R) was announced\/released today and, while the examples they provide are compelling there's a \"gotcha\" for potential new folks using SQL in general and SQL + MonetDB + R together. The toy example on the site shows dumping `mtcars` with `dbWriteTable` and then doing things. Real-world CSV files\u2026","rel":"","context":"In &quot;monetdb&quot;","block_context":{"text":"monetdb","link":"https:\/\/rud.is\/b\/category\/monetdb\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12811,"url":"https:\/\/rud.is\/b\/2020\/08\/08\/quick-hit-speeding-up-data-frame-creation\/","url_meta":{"origin":14213,"position":3},"title":"Quick Hit: Speeding Up Data Frame Creation","author":"hrbrmstr","date":"2020-08-08","format":false,"excerpt":"(This is part 2 of n \"quick hit\" posts, each walking through some approaches to speeding up components of an iterative operation. Go here for part 1). Thanks to the aforementioned previous post, we now have a super fast way of reading individual text files containing HTTP headers from HEAD\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11215,"url":"https:\/\/rud.is\/b\/2018\/08\/04\/digging-into-mbox-details-a-tale-of-tm-reticulate\/","url_meta":{"origin":14213,"position":4},"title":"Digging into mbox details: A tale of tm &#038; reticulate","author":"hrbrmstr","date":"2018-08-04","format":false,"excerpt":"\u2728 I had to processes a bunch of emails for a $DAYJOB task this week and my \"default setting\" is to use R for pretty much everything (this should come as no surprise). Treating mail as data is not an uncommon task and many R packages exist that can reach\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"https:\/\/rud.is\/b\/category\/python-2\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12142,"url":"https:\/\/rud.is\/b\/2019\/04\/12\/a-note-to-our-community-on-how-to-hide-your-content-from-search-engines\/","url_meta":{"origin":14213,"position":5},"title":"A Note to Our Community On How To Hide Your Content From Search Engines","author":"hrbrmstr","date":"2019-04-12","format":false,"excerpt":"UPDATE 2019-04-17 \u2014 The example at the bottom which shows that the, er, randomly chosen site has the offending <meta> tag present is an old result. As of this update timestamp, that robots noindex tag is not on the site. Since the presence status of that tag is in flux,\u2026","rel":"","context":"In &quot;Leadership&quot;","block_context":{"text":"Leadership","link":"https:\/\/rud.is\/b\/category\/leadership\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/14213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=14213"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/14213\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=14213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=14213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=14213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}