{"id":29123,"date":"2021-06-04T11:24:00","date_gmt":"2021-06-04T08:24:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29123"},"modified":"2021-10-17T04:26:37","modified_gmt":"2021-10-17T01:26:37","slug":"hur-man-anvander-guzzle-en-php-http-klient-for-att-skicka-http-forfragningar","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/hur-man-anvander-guzzle-en-php-http-klient-for-att-skicka-http-forfragningar\/","title":{"rendered":"Hur man anv\u00e4nder Guzzle &#8211; En PHP HTTP-klient f\u00f6r att skicka HTTP-f\u00f6rfr\u00e5gningar"},"content":{"rendered":"<p>Utvecklaren st\u00f6ter alltid p\u00e5 en uppgift d\u00e4r de beh\u00f6ver skicka HTTP-f\u00f6rfr\u00e5gningar till andra resurser och hantera svaret. Det popul\u00e4ra s\u00e4ttet att utf\u00f6ra dessa uppgifter \u00e4r att anv\u00e4nda en cURL. Att anv\u00e4nda cURL \u00e4r dock inte relativt l\u00e4tt f\u00f6r en nyb\u00f6rjare. \u00c4ven f\u00f6r att skriva ett skript i cURL borde din server ha aktiverat cURL-till\u00e4gget.<\/p>\n<p><a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a> \u00e4r ett alternativ till cURL. Det \u00e4r en PHP HTTP-klient som g\u00f6r det enkelt att skicka HTTP-f\u00f6rfr\u00e5gningar och trivialt att integrera med webbtj\u00e4nster. Till och med kan jag s\u00e4ga fr\u00e5n min erfarenhet att Guzzle \u00e4r b\u00e4ttre \u00e4n cURL. Det \u00e4r enkelt och l\u00e4tt att anv\u00e4nda. Om du anv\u00e4nder Guzzle beh\u00f6ver du inte ha cURL-till\u00e4gg p\u00e5 din server. Det ger dig b\u00e4ttre formatering av kod j\u00e4mf\u00f6rt med cURL.<\/p>\n<p>Med det sagt, l\u00e5t oss se hur man anv\u00e4nder Guzzle i din applikation.<\/p>\n<h3>Installation<\/h3>\n<p>Det rekommenderade s\u00e4ttet att installera Guzzle \u00e4r via Composer. Om du inte har installerat Composer p\u00e5 ditt system kan du h\u00e4mta det <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4rifr\u00e5n<\/a>.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20348-6081e2b54209f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20348-6081e2b54209f.png\" alt=\"Hur man anv\u00e4nder Guzzle - En PHP HTTP-klient f\u00f6r att skicka HTTP-f\u00f6rfr\u00e5gningar\" ><\/a><\/p>\n<p>\u00d6ppna terminalen i din projektkatalog och k\u00f6r kommandot nedan f\u00f6r att installera Guzzle.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Guzzle ger st\u00f6d f\u00f6r alla HTTP-f\u00f6rfr\u00e5gningar som \u00e4r GET, DELETE, HEAD, ALTERNATIV, PATCH, POST och PUT. I den h\u00e4r handledningen studerar vi hur man anv\u00e4nder Guzzle f\u00f6r att skicka HTTP-f\u00f6rfr\u00e5gningar och hantera svar med det.<\/p>\n<p>Som ett exempel tar jag <a href=\"https:\/\/reqres.in\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">REQ | RES-<\/a> tj\u00e4nsten som ger ett falskt riktigt API f\u00f6r att testa HTTP-f\u00f6rfr\u00e5gningar.<\/p>\n<h3>Hur man skickar HTTP-beg\u00e4ran med Guzzle<\/h3>\n<p>Efter installationen av Guzzle-biblioteket m\u00e5ste du inkludera en Guzzle-milj\u00f6 i din fil enligt f\u00f6ljande.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\nuse GuzzleHttpClient;<\/code><\/pre>\n<p>L\u00e5t oss nu prova n\u00e5gra operationer en efter en som GET, POST, File upload, kopiera fil fr\u00e5n fj\u00e4rr-URL till en lokal katalog, PUT, PATCH och DELETE.<\/p>\n<h4>F\u00c5 beg\u00e4ran med Guzzle<\/h4>\n<p>Om du tittar p\u00e5 webbplatsen REQ | RES gav de n\u00e5gra slutpunkter f\u00f6r &quot;GET&quot; -f\u00f6rfr\u00e5gningar. Jag tar exemplet med &#8217;LIST USERS&#8217; slutpunkt. F\u00f6r att f\u00e5 anv\u00e4ndarlistan ber de att skicka en GET-beg\u00e4ran till denna slutpunkt <a href=\"https:\/\/reqres.in\/api\/users?page=2\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/reqres.in\/api\/users?page=2<\/a>.<\/p>\n<p>I Guzzle skickar vi denna GET-beg\u00e4ran enligt f\u00f6ljande.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/reqres.in',\n]);\n\u00a0\u00a0\n$response = $client-&gt;request('GET', '\/api\/users', [\n\u00a0\u00a0\u00a0\u00a0'query' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'page' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n\/\/get status code using $response-&gt;getStatusCode();\n\u00a0\n$body = $response-&gt;getBody();\n$arr_body = json_decode($body);\nprint_r($arr_body);<\/code><\/pre>\n<p>F\u00f6rst extraherade jag en &#8217;base_uri&#8217; (gemensam URL) som <a href=\"https:\/\/reqres.in\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/reqres.in<\/a>. H\u00e4r \u00e4r den slutliga slutpunkten &#8217;\/ api \/ anv\u00e4ndare&#8217; och det kr\u00e4ver en GET-parameter som &#8217;sida&#8217;. I Guzzle kan du skicka GET-parametrar med hj\u00e4lp av &#8217;query&#8217; -matrisen som visas i ovanst\u00e5ende kod.<\/p>\n<h4>POST-beg\u00e4ran med Guzzle<\/h4>\n<p>Normalt finns det tv\u00e5 typer av POST-f\u00f6rfr\u00e5gningar. Du kan beh\u00f6va POST-parametrar som &#8217;application \/ x-www-form-urlencoded&#8217; POST-beg\u00e4ran eller ladda upp JSON-kodad data som en del av beg\u00e4ran. Du kan skicka JSON-kodad data enligt nedan.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/reqres.in',\n]);\n\u00a0\n$response = $client-&gt;request('POST', '\/api\/users', [\n\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name' =&gt; 'Sam',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'job' =&gt; 'Developer'\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n\/\/get status code using $response-&gt;getStatusCode();\n\u00a0\n$body = $response-&gt;getBody();\n$arr_body = json_decode($body);\nprint_r($arr_body);<\/code><\/pre>\n<p>I fallet med &#8217;application \/ x-www-form-urlencoded&#8217; POST-beg\u00e4ran kan du POST-parametrar enligt f\u00f6ljande.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'BASE_URL_ENDPOINT',\n]);\n\u00a0\n$client-&gt;request('POST', '\/endpoint_here', [\n\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'foo' =&gt; 'bar',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'baz' =&gt; ['hi', 'there!']\n\u00a0\u00a0\u00a0]\n]);<\/code><\/pre>\n<p>I vissa fall ber API-slutpunkter dig att skicka auktoriseringstoken i varje HTTP-beg\u00e4ran. Anv\u00e4ndaren kan skicka denna token som rubriker i din Guzzle-beg\u00e4ran.<\/p>\n<pre><code>&lt;?php\n$client-&gt;request('POST', '\/endpoint_here', [\n\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Bearer TOKEN_VALUE\"\n\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'foo' =&gt; 'bar',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'baz' =&gt; ['hi', 'there!']\n\u00a0\u00a0\u00a0\u00a0]\n]);<\/code><\/pre>\n<h4>Kopiera fil fr\u00e5n fj\u00e4rrservern med Guzzle<\/h4>\n<p>Om du vill kopiera en fil fr\u00e5n en fj\u00e4rrserver till din lokala katalog \u00e4r Guzzle ett b\u00e4ttre alternativ. L\u00e5t oss s\u00e4ga att du vill kopiera den h\u00e4r bilden p\u00e5 <a href=\"https:\/\/artisansweb.net\/wp-content\/uploads\/2020\/03\/blog.jpg\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/artisansweb.net\/wp-content\/uploads\/2020\/03\/blog.jpg<\/a> som &#8217;blog.jpg&#8217; till din lokala katalog. Vi skriver koden f\u00f6r det enligt nedan.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$fp = fopen('blog.jpg', 'wb');\n\u00a0\n$client = new GuzzleHttpClient();\n$request = $client-&gt;get('https:\/\/artisansweb.net\/wp-content\/uploads\/2020\/03\/blog.jpg', ['sink' =&gt; $fp]);\n\u00a0\nfclose($fp);<\/code><\/pre>\n<h4>Fil\u00f6verf\u00f6ring med Guzzle<\/h4>\n<p>Som vi alla vet m\u00e5ste vi f\u00f6r att ladda upp filer st\u00e4lla in f\u00f6rfr\u00e5gan till ett &quot;multipart \/ form-data&quot; -formul\u00e4r. Grundkoden i Guzzle f\u00f6r \u00f6verf\u00f6ring av filer skulle skrivas enligt nedan.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'BASE_URL_HERE',\n]);\n\u00a0\n$client-&gt;request('POST', '\/endpoint_here', [\n\u00a0\u00a0\u00a0\u00a0'multipart' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; 'files', \/\/ name value requires by endpoint\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'contents' =&gt; fopen('\/path\/to\/file', 'r'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'filename' =&gt; 'custom_image.jpg'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0]\n]);<\/code><\/pre>\n<p>F\u00f6r att demonstrera fil\u00f6verf\u00f6ringen tar jag ett <a href=\"https:\/\/resmush.it\/api\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">liveexempel<\/a> p\u00e5 <a href=\"https:\/\/resmush.it\/api\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reSmush.it API<\/a> som skickar en optimerad version av bilden som svar. Du m\u00e5ste POSTA din bild till deras slutpunkt. Koden f\u00f6r det med hj\u00e4lp av Guzzle enligt f\u00f6ljande.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'http:\/\/api.resmush.it',\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', \"?qlty=92\", [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'multipart' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; 'files', \/\/ name value requires by endpoint\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'contents' =&gt; fopen(getcwd().'\/blog.jpg', 'r'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'filename' =&gt; 'blog.jpg',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'headers'\u00a0 =&gt; array('Content-Type' =&gt; mime_content_type(getcwd().'\/blog.jpg'))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (200 == $response-&gt;getStatusCode()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $response-&gt;getBody();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_result = json_decode($response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print_r($arr_result);\n\u00a0\u00a0\u00a0\u00a0}\n} catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n}<\/code><\/pre>\n<h3>PUT, PATCH och DELETE Beg\u00e4ran med Guzzle<\/h3>\n<p>PUT- och PATCH-f\u00f6rfr\u00e5gningarna anv\u00e4nds f\u00f6r att uppdatera resurserna. Dessa tv\u00e5 f\u00f6rfr\u00e5gningar g\u00f6r det dock annorlunda.<\/p>\n<p>PUT skriver \u00f6ver hela enheten om den redan finns och skapar en ny resurs om den inte finns. Om du vill uppdatera namnet p\u00e5 en person m\u00e5ste du skicka hela resursen n\u00e4r du g\u00f6r en PUT-beg\u00e4ran.<\/p>\n<pre><code>&lt;?php\n&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/reqres.in',\n]);\n\u00a0\u00a0\n$response = $client-&gt;request('PUT', '\/api\/users\/2', [\n\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name' =&gt; 'Sam',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'job' =&gt; 'Developer'\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\u00a0\n\/\/get status code using $response-&gt;getStatusCode();\n\u00a0\n$body = $response-&gt;getBody();\n$arr_body = json_decode($body);\nprint_r($arr_body);<\/code><\/pre>\n<p>PATCH-beg\u00e4ran till\u00e4mpar en delvis uppdatering av resursen. Det betyder att du bara m\u00e5ste skicka de data som du vill uppdatera, och det p\u00e5verkar inte eller f\u00f6r\u00e4ndrar n\u00e5got annat. S\u00e5 om du vill uppdatera namnet p\u00e5 en person m\u00e5ste du bara skicka namnparametern.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/reqres.in',\n]);\n\u00a0\u00a0\n$response = $client-&gt;request('PATCH', '\/api\/users\/2', [\n\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name' =&gt; 'Sam',\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\u00a0\n\/\/get status code using $response-&gt;getStatusCode();\n\u00a0\n$body = $response-&gt;getBody();\n$arr_body = json_decode($body);\nprint_r($arr_body);<\/code><\/pre>\n<p>En DELETE-beg\u00e4ran \u00e4r rakt fram\u00e5t. Du beh\u00f6ver bara tr\u00e4ffa slutpunkten enligt f\u00f6ljande.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'https:\/\/reqres.in',\n]);\n\u00a0\u00a0\n$response = $client-&gt;request('DELETE', '\/api\/users\/2');\n\u00a0\u00a0\necho $response-&gt;getStatusCode(); \/\/should gives 204<\/code><\/pre>\n<p>Jag hoppas att du fick veta om Guzzle och grunderna f\u00f6r hur du anv\u00e4nder det. Du kan l\u00e4sa mer om Guzzle Request Options i deras <a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\/request-options.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentation<\/a>. Dela dina tankar eller f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/youtube-api-hur-far-jag-en-lista-over-youtube-videor-fran-din-kanal\/\" title=\"YouTube API - Hur f\u00e5r jag en lista \u00f6ver YouTube-videor fr\u00e5n din kanal\">YouTube API &#8211; Hur f\u00e5r jag en lista \u00f6ver YouTube-videor fr\u00e5n din kanal<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/tinypng-komprimera-bilder-med-php\/\" title=\"TinyPNG Komprimera bilder med PHP\">TinyPNG Komprimera bilder med PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/html-formvalidering-med-persilja\/\" title=\"HTML-formvalidering med persilja\">HTML-formvalidering med persilja<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guzzle ger ett s\u00f6ml\u00f6st s\u00e4tt att skicka HTTP-beg\u00e4ran och hantera svaret. I den h\u00e4r artikeln studerar vi hur man skickar HTTP-beg\u00e4ran och hanterar<\/p>\n","protected":false},"author":1,"featured_media":21661,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[279],"tags":[850],"class_list":["post-29123","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29123"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29123\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/21661"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}