{"id":231770,"date":"2022-12-28T18:43:00","date_gmt":"2022-12-28T15:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231770"},"modified":"2022-12-28T18:45:52","modified_gmt":"2022-12-28T15:45:52","slug":"ero-curl-ja-wordpress-pyyntoeissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/ero-curl-ja-wordpress-pyyntoeissae\/","title":{"rendered":"Ero cURL- ja WordPress-pyynt\u00f6iss\u00e4"},"content":{"rendered":"\n<p><a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a> on eritt\u00e4in suosittu PHP-kirjasto, johon olen viitannut useissa viesteiss\u00e4 (esimerkiksi <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/curl-osoitteen-kaeyttaeminen-sen-maeaerittaemiseen-onko-maeaeritetty-url-osoite-kelvollinen-sivu\/\" title=\"1\">1<\/a> ja <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/uudelleenohjauksen-maeaeraenpaeaen-loeytaeminen-php-n-avulla\/\" title=\"2\">2<\/a> ). Ja se on mielest\u00e4ni sellainen, jota kaikkien PHP:ss\u00e4 ty\u00f6skentelevien (kyll\u00e4, jopa WordPressiss\u00e4 ty\u00f6skentelevien) pit\u00e4isi tarkistaa, tutkia ja mahdollisesti k\u00e4ytt\u00e4\u00e4.<\/p>\n<p>Mutta WordPressin natiivisovellusliittymien ansiosta meill\u00e4 on abstraktiotaso, jonka avulla voimme saavuttaa suurelta osin samat toiminnot (ellei samoja toimintoja).<\/p>\n<p>Tarkemmin sanottuna puhun <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_safe_remote_get -sovelluksesta<\/a>.<\/p>\n<blockquote><p>\n<a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159653-61e6f9c04b30e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159653-61e6f9c04b30e.png\" alt=\"Ero cURL- ja WordPress-pyynt\u00f6iss\u00e4\"><\/a><\/p>\n<p>T\u00e4m\u00e4 toiminto on ihanteellinen, kun HTTP-pyynt\u00f6 tehd\u00e4\u00e4n mielivaltaiseen URL-osoitteeseen. URL-osoite tarkistetaan uudelleenohjauksen v\u00e4ltt\u00e4miseksi ja v\u00e4\u00e4renn\u00f6shy\u00f6kk\u00e4ysten pyyt\u00e4miseksi.<\/p>\n<\/blockquote>\n<p>Mainitsen erityisesti <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4m\u00e4n toiminnon<\/a> turvallisen muunnelman yll\u00e4 olevaa m\u00e4\u00e4ritelm\u00e4\u00e4 varten (on toinen muunnelma, mutta on t\u00e4rke\u00e4\u00e4 ryhty\u00e4 varotoimiin mielivaltaisia \u200b\u200bURL-osoitteita vastaan \u200b\u200bturvallisuussyist\u00e4).<\/p>\n<h2>cURL- ja WordPress-pyynn\u00f6t<\/h2>\n<p>Joka tapauksessa, milt\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-00-get-curl-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">funktio<\/a> voisi n\u00e4ytt\u00e4\u00e4, jos k\u00e4ytt\u00e4isimme t\u00e4t\u00e4 cURL-kirjastoa?<\/p>\n<pre><code>&lt;?php\n\ntry {\n    $curl = curl_init();\n    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');\n    curl_setopt($curl, CURLOPT_URL, $url);\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\n    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);\n    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);\n    $response = curl_exec($curl);\n\n    if (is_object($response)) {\n        return false;\n    }\n\n    if (false === $response) {\n        throw new Exception(curl_error($curl), curl_errno($curl));\n    }\n\n    curl_close($curl);\n} catch (Exception $e) {\n    trigger_error(\n        sprintf(\n            'Curl failed with error #%d: %s',\n            $e-&gt;getCode(),\n            $e-&gt;getMessage()\n        ),\n        E_USER_ERROR\n    );\n}<\/code><\/pre>\n<p>Lyhyesti sanottuna (ja t\u00e4m\u00e4 on tyypillist\u00e4 useimmille cURL-pyynn\u00f6ille):<\/p>\n<ul>\n<li>alusta cURL-kirjasto,<\/li>\n<li><a href=\"https:\/\/curl.haxx.se\/docs\/manpage.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aseta<\/a> pyynt\u00f6\u00e4si koskevat vaihtoehdot (jotka vaihtelevat mainitun pyynn\u00f6n mukaan),<\/li>\n<li>tehd\u00e4 pyynt\u00f6,<\/li>\n<li>arvioi vastausta<\/li>\n<li>saa kiinni tarvittavista poikkeuksista.<\/li>\n<\/ul>\n<p>Ja sitten jos k\u00e4ytt\u00e4isimme <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-01-safe-remote-get-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">samaa koodin muunnelmaa<\/a> WordPressiss\u00e4?<\/p>\n<pre><code>&lt;?php\n\n$response = wp_safe_remote_get($url);\nif (is_wp_error($response)) {\n    return '';\n}\n$response = $response['body'];<\/code><\/pre>\n<p>T\u00e4m\u00e4 on paljon pienempi ja luultavasti helpompi lukea (ainakin WordPressiss\u00e4 ty\u00f6skenteleville). Argumenttien osalta en my\u00f6sk\u00e4\u00e4n v\u00e4lit\u00e4 funktioon mit\u00e4\u00e4n muuta kuin URL-osoitetta.<\/p>\n<p>Jos luet linkitetyn API-dokumentaation, huomaat, ett\u00e4 meill\u00e4 on jonkin verran hallintaa siihen. Se kuitenkin vaihtelee sen mukaan, kuinka sinun t\u00e4ytyy kommunikoida tietyn p\u00e4\u00e4tepisteen kanssa.<\/p>\n<p>Lis\u00e4ksi, kuinka k\u00e4sittelet <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_error\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Erroria<\/a>, on sinun p\u00e4\u00e4tett\u00e4viss\u00e4si. Tyhj\u00e4n merkkijonon palauttaminen on harvoin paras vaihtoehto; kuitenkin t\u00e4m\u00e4n esimerkin tarkoituksiin se riitt\u00e4\u00e4. Ensisijaisesti etsimme tapausta, joka on vastauksen runko ja se on koodin painopiste.<\/p>\n<h2>Milloin k\u00e4yt\u00e4mme toista tai toista?<\/h2>\n<p>Kun on kyse cURL- ja WordPress-et\u00e4pyynt\u00f6jen kanssa ty\u00f6skentelyst\u00e4 ja k\u00e4ytett\u00e4v\u00e4n menetelm\u00e4n m\u00e4\u00e4ritt\u00e4misest\u00e4, noudatan yleens\u00e4 t\u00e4t\u00e4 s\u00e4\u00e4nt\u00f6\u00e4:<\/p>\n<ul>\n<li>Jos tarvitsemani voidaan saavuttaa WordPress API -toiminnolla, k\u00e4yt\u00e4n sit\u00e4.<\/li>\n<li>Jos ei, k\u00e4yt\u00e4n cURL-osoitetta.<\/li>\n<\/ul>\n<p>En voi antaa vahvempaa s\u00e4\u00e4nt\u00f6\u00e4.<\/p>\n<p>Katso sen sijaan p\u00e4\u00e4tepistett\u00e4, johon olet yhteydess\u00e4, m\u00e4\u00e4rit\u00e4, mink\u00e4 tason hallintaa tarvitset pyynn\u00f6lle, ja tee p\u00e4\u00e4t\u00f6s siit\u00e4, miten haluat k\u00e4sitell\u00e4 vastausta.<\/p>\n<p>Sielt\u00e4 sinulla pit\u00e4isi olla hyv\u00e4 idea siit\u00e4, mit\u00e4 kirjastoa haluat k\u00e4ytt\u00e4\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>cURL- ja WordPress-et\u00e4pyynn\u00f6t antavat meille paljon samoja toimintoja. Mutta meid\u00e4n on pystytt\u00e4v\u00e4 m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n, mik\u00e4 vaihtoehto on paras.<\/p>\n","protected":false},"author":1,"featured_media":237087,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,843,803],"tags":[1166],"class_list":["post-231770","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opetusohjelmia","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231770"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231770\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/237087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}