{"id":10917,"date":"2023-11-13T14:07:39","date_gmt":"2023-11-13T19:07:39","guid":{"rendered":"https:\/\/www.redline13.com\/blog\/?p=10917"},"modified":"2023-11-13T14:07:40","modified_gmt":"2023-11-13T19:07:40","slug":"dynamic-requests-from-code","status":"publish","type":"post","link":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/","title":{"rendered":"Dynamic Requests from Code"},"content":{"rendered":"<p><a id=\"post-10917-_ag57y1gdmcnj\"><\/a> <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-10918\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-1.png\" alt=\"Dynamic Requests from Code\" width=\"400\" height=\"300\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-1.png 400w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-1-300x225.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/p>\n<p>One of the challenges that often presents itself when testing modern web applications is the ubiquitous reliance on asynchronous requests embedded in the user experience. It is possible to replicate most of these actions purely using request samplers in <a href=\"https:\/\/jmeter.apache.org\/usermanual\/\">JMeter<\/a>. However, there are many cases where it is desirable to get the response for a simple task \u2013 especially where it helps us attain our main test objectives. There may also be a need to request certain out-of-context information that is vital to the test, yet not part of it. In this post, we will show you how to make dynamic requests from code using scripting elements with the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Scripting_for_the_Java_Platform\">JSR223<\/a> processors included with JMeter.<\/p>\n<h3><a id=\"post-10917-_v9ajx8vjzxl9\"><\/a>The JSR223 Preprocessor<\/h3>\n<p>JMeter includes a number of components that allow the test designer to interject Java-based code into the test plan. The <a href=\"https:\/\/jmeter.apache.org\/usermanual\/component_reference.html#JSR223_PreProcessor\"><em>JSR223 Preprocessor<\/em><\/a> is one such element that can be added to run before side-by-side samplers. For example, the following preprocessor will run prior to the <em><a href=\"https:\/\/jmeter.apache.org\/usermanual\/component_reference.html#HTTP_Request\">HTTP Request<\/a><\/em> sampler that follows it:<\/p>\n<figure id=\"attachment_10919\" class=\"wp-caption aligncenter\" style=\"max-width: 289px\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10919\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-2.png\" alt=\"The JMeter JSR223 Preprocessor can be associated with any sampler\" width=\"289\" height=\"96\" \/><figcaption class=\"wp-caption-text\">The JMeter JSR223 Preprocessor can be associated with any sampler.<\/figcaption><\/figure>\n<p>Within the configuration panel, you can write a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Apache_Groovy\">Groovy<\/a> script to perform just about any action. Groovy is an Apache implementation of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Java_%28programming_language%29\">Java<\/a> that is suitable for scripting tasks. Below is an example of how an independent request for a web resource from an API call could be added to a JMeter test. In the following section, we will review the code that you can customize for your particular use case.<\/p>\n<figure id=\"attachment_10920\" class=\"wp-caption aligncenter\" style=\"max-width: 941px\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10920\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-3.png\" alt=\"Configuring the JSR223 Preprocessor with a simple Groovy script performing an HTTP GET request\" width=\"941\" height=\"609\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-3.png 941w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-3-300x194.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-3-768x497.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-3-425x275.png 425w\" sizes=\"auto, (max-width: 941px) 100vw, 941px\" \/><figcaption class=\"wp-caption-text\">Configuring the <em>JSR223 Preprocessor<\/em> with a simple Groovy script performing an HTTP GET request.<\/figcaption><\/figure>\n<h3><a id=\"post-10917-_u0ntyw2mzzvt\"><\/a>Making Direct Calls with JSR223 Components<\/h3>\n<p>The <em>JSR223 Preprocessor<\/em> shown above can be added anywhere in your test plan. As a <em>preprocessor<\/em> component, you will need to have an actionable element on the same level (<em>e.g.<\/em>, a request sampler). Let\u2019s use the following code example which will perform an HTTP GET request to a hypothetical API endpoint. In this case, we will make a call to a \u201cwidget API\u201d and load the resultant JSON object into a JMeter <a href=\"https:\/\/jmeter.apache.org\/usermanual\/best-practices.html#user_variables\">user variable<\/a>:<\/p>\n<pre><strong>import org.apache.http.client.methods.HttpGet\n<\/strong><strong>import org.apache.http.impl.client.HttpClientBuilder\n<\/strong><strong>import org.apache.http.util.EntityUtils\n<\/strong><strong>    \ndef httpClient = HttpClientBuilder.create().build()\n<\/strong><strong>def httpGet = new HttpGet(\n<\/strong><strong>\u00a0 \u00a0 \"http:\/\/www.target-test-domain.com\/widget_api\/getWidget?item=100\")\n<\/strong><strong>def httpResponse = httpClient.execute(httpGet)\n    \n<\/strong><strong>def item = EntityUtils.toString(httpResponse.getEntity(), \"UTF-8\")\n    \n<\/strong><strong>vars.put('item', item)<\/strong><\/pre>\n<p>The first few lines in the above code are import statements to load the necessary packages to make in-line web requests. You can replace the contents of <code>HttpGet(...)<\/code> with your own web call. The last line of the script saves the expected JSON response using <code>vars.put()<\/code> to the variable <code>item<\/code>.<\/p>\n<h3><a id=\"post-10917-_mzqgi1o23veq\"><\/a>Doing Something Useful with the Result<\/h3>\n<p>Since the objective is to obtain out-of-context data and inject it into our test, let\u2019s illustrate this with a basic example. In an <em>HTTP Request<\/em> that occurs after our <em>JSR223 Preprocessor<\/em>, we can use the output from our previous request to populate the POST body of another request. In the example below, we have populated another hypothetical API call to the <code>\/catalog\/items<\/code> endpoint using the content from <code>item<\/code> we previously fetched:<\/p>\n<figure id=\"attachment_10921\" class=\"wp-caption aligncenter\" style=\"max-width: 1184px\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10921\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-4.png\" alt=\"Using the JSR223 Preprocessor output to populate the body of another request\" width=\"1184\" height=\"571\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-4.png 1184w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-4-300x145.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-4-1024x494.png 1024w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-4-768x370.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-4-425x205.png 425w\" sizes=\"auto, (max-width: 1184px) 100vw, 1184px\" \/><figcaption class=\"wp-caption-text\">Using the <em>JSR223 Preprocessor<\/em> output to populate the body of another request.<\/figcaption><\/figure>\n<p>This request will execute as part of our test, and be included in the test results, unlike the request we used to populate the value for <code>item<\/code>. Structuring your tests in this way can be useful when trying to obtain isolated results in your test output.<\/p>\n<h3><a id=\"post-10917-_6d943qoro02y\"><\/a>Other JSR223 Elements<\/h3>\n<p>Beyond the <em>JSR223 Preprocessor<\/em> we discussed, there are several other similar JSR223 elements that are included in JMeter. The <a href=\"https:\/\/jmeter.apache.org\/usermanual\/component_reference#JSR223_PostProcessor\"><em>JSR223 Postprocessor<\/em><\/a> is very similar, with its key difference being scripts are executed <em>after<\/em> requests versus before them. There is even a <a href=\"https:\/\/jmeter.apache.org\/usermanual\/component_reference#JSR223_Sampler\"><em>JSR223 Sampler<\/em><\/a> component which can be used in a hybrid way to the example above \u2013 and even though as a sampler the response is recorded, the scripting element provides fine control over this. You can find documentation for all of the various JSR223 elements in the official Apache JMeter <a href=\"https:\/\/jmeter.apache.org\/usermanual\/component_reference\">component reference<\/a>.<\/p>\n<hr \/>\n<p>Did you know that RedLine13 offers a full-featured, time-limited free trial? <a href=\"https:\/\/www.redline13.com\/Service\">Sign up now<\/a>, and try the example discussed in this article for yourself today.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the challenges that often presents itself when testing modern web applications is the ubiquitous reliance on asynchronous requests embedded in the user experience. It is possible to replicate most of these actions purely using request samplers in JMeter. However, there are many cases where it is desirable to get the response for a simple task \u2013 especially where it helps us attain our main test objectives. There may also be a need to request<a class=\"more-link\" href=\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\">Read More &rarr;<\/a><\/p>\n","protected":false},"author":11,"featured_media":10918,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[75,100,236,667,283,668,301,666,665,318,424],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-dkoziel","4":"post-10917","6":"format-standard","7":"has-post-thumbnail","8":"category-blog","9":"post_tag-apache-jmeter","10":"post_tag-beanshell","11":"post_tag-groovy","12":"post_tag-http-requests","13":"post_tag-jmeter","14":"post_tag-jmeter-scripting","15":"post_tag-jsr223","16":"post_tag-jsr223-postprocessor","17":"post_tag-jsr223-preprocessor","18":"post_tag-load-testing","19":"post_tag-redline13"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.12 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dynamic Requests from Code - RedLine13<\/title>\n<meta name=\"description\" content=\"Here&#039;s how to make dynamic requests from code using scripting elements with JSR223 processors included with JMeter.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dynamic Requests from Code - RedLine13\" \/>\n<meta property=\"og:description\" content=\"Here&#039;s how to make dynamic requests from code using scripting elements with JSR223 processors included with JMeter.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\" \/>\n<meta property=\"og:site_name\" content=\"RedLine13\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-13T19:07:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-13T19:07:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"David Koziel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Koziel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\"},\"author\":{\"name\":\"David Koziel\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/51d282221e3230ab35f964f98ada9b20\"},\"headline\":\"Dynamic Requests from Code\",\"datePublished\":\"2023-11-13T19:07:39+00:00\",\"dateModified\":\"2023-11-13T19:07:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\"},\"wordCount\":669,\"publisher\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\"},\"keywords\":[\"apache jmeter\",\"Beanshell\",\"Groovy\",\"HTTP Requests\",\"JMeter\",\"JMeter scripting\",\"JSR223\",\"JSR223 Postprocessor\",\"JSR223 Preprocessor\",\"Load Testing\",\"RedLine13\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\",\"url\":\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\",\"name\":\"Dynamic Requests from Code - RedLine13\",\"isPartOf\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#website\"},\"datePublished\":\"2023-11-13T19:07:39+00:00\",\"dateModified\":\"2023-11-13T19:07:40+00:00\",\"description\":\"Here's how to make dynamic requests from code using scripting elements with JSR223 processors included with JMeter.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.redline13.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dynamic Requests from Code\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#website\",\"url\":\"https:\/\/www.redline13.com\/blog\/\",\"name\":\"RedLine13\",\"description\":\"(Almost) Free Load Testing in the Cloud\",\"publisher\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.redline13.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\",\"name\":\"RedLine13\",\"url\":\"https:\/\/www.redline13.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg\",\"contentUrl\":\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg\",\"width\":300,\"height\":68,\"caption\":\"RedLine13\"},\"image\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/51d282221e3230ab35f964f98ada9b20\",\"name\":\"David Koziel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2babf644e0993fc86893c24d7525f1e3be114a8746c01249797f25587ae1697a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2babf644e0993fc86893c24d7525f1e3be114a8746c01249797f25587ae1697a?s=96&d=mm&r=g\",\"caption\":\"David Koziel\"},\"url\":\"https:\/\/www.redline13.com\/blog\/author\/dkoziel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dynamic Requests from Code - RedLine13","description":"Here's how to make dynamic requests from code using scripting elements with JSR223 processors included with JMeter.","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:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/","og_locale":"en_US","og_type":"article","og_title":"Dynamic Requests from Code - RedLine13","og_description":"Here's how to make dynamic requests from code using scripting elements with JSR223 processors included with JMeter.","og_url":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/","og_site_name":"RedLine13","article_published_time":"2023-11-13T19:07:39+00:00","article_modified_time":"2023-11-13T19:07:40+00:00","og_image":[{"width":400,"height":300,"url":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2023\/11\/word-image-10917-1.png","type":"image\/png"}],"author":"David Koziel","twitter_card":"summary_large_image","twitter_misc":{"Written by":"David Koziel","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/#article","isPartOf":{"@id":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/"},"author":{"name":"David Koziel","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/51d282221e3230ab35f964f98ada9b20"},"headline":"Dynamic Requests from Code","datePublished":"2023-11-13T19:07:39+00:00","dateModified":"2023-11-13T19:07:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/"},"wordCount":669,"publisher":{"@id":"https:\/\/www.redline13.com\/blog\/#organization"},"keywords":["apache jmeter","Beanshell","Groovy","HTTP Requests","JMeter","JMeter scripting","JSR223","JSR223 Postprocessor","JSR223 Preprocessor","Load Testing","RedLine13"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/","url":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/","name":"Dynamic Requests from Code - RedLine13","isPartOf":{"@id":"https:\/\/www.redline13.com\/blog\/#website"},"datePublished":"2023-11-13T19:07:39+00:00","dateModified":"2023-11-13T19:07:40+00:00","description":"Here's how to make dynamic requests from code using scripting elements with JSR223 processors included with JMeter.","breadcrumb":{"@id":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.redline13.com\/blog\/2023\/11\/dynamic-requests-from-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.redline13.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dynamic Requests from Code"}]},{"@type":"WebSite","@id":"https:\/\/www.redline13.com\/blog\/#website","url":"https:\/\/www.redline13.com\/blog\/","name":"RedLine13","description":"(Almost) Free Load Testing in the Cloud","publisher":{"@id":"https:\/\/www.redline13.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.redline13.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.redline13.com\/blog\/#organization","name":"RedLine13","url":"https:\/\/www.redline13.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg","contentUrl":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg","width":300,"height":68,"caption":"RedLine13"},"image":{"@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/51d282221e3230ab35f964f98ada9b20","name":"David Koziel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2babf644e0993fc86893c24d7525f1e3be114a8746c01249797f25587ae1697a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2babf644e0993fc86893c24d7525f1e3be114a8746c01249797f25587ae1697a?s=96&d=mm&r=g","caption":"David Koziel"},"url":"https:\/\/www.redline13.com\/blog\/author\/dkoziel\/"}]}},"_links":{"self":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/10917","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/comments?post=10917"}],"version-history":[{"count":3,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/10917\/revisions"}],"predecessor-version":[{"id":10924,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/10917\/revisions\/10924"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/media\/10918"}],"wp:attachment":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/media?parent=10917"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/categories?post=10917"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/tags?post=10917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}