{"id":231169,"date":"2022-12-28T18:55:00","date_gmt":"2022-12-28T15:55:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231169"},"modified":"2022-12-28T18:55:50","modified_gmt":"2022-12-28T15:55:50","slug":"skillnaden-mellan-curl-och-wordpress-foerfraagningar","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/skillnaden-mellan-curl-och-wordpress-foerfraagningar\/","title":{"rendered":"Skillnaden mellan cURL- och WordPress-f\u00f6rfr\u00e5gningar"},"content":{"rendered":"\n<p><a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a> \u00e4r ett mycket popul\u00e4rt PHP-bibliotek som jag har refererat till i flera inl\u00e4gg andra inl\u00e4gg (<a href=\"https:\/\/wordpress.mediadoma.com\/sv\/anvaenda-curl-foer-att-avgoera-om-den-angivna-webbadressen-aer-en-giltig-sida\/\" title=\"1\">1<\/a> och <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/hitta-destinationen-foer-en-omdirigering-med-php\/\" title=\"2\">2<\/a>, till exempel). Och det \u00e4r en som jag tycker b\u00f6r granskas, utforskas och m\u00f6jligen anv\u00e4ndas av alla som arbetar i PHP (ja, \u00e4ven de som arbetar i WordPress).<\/p>\n<p>Men p\u00e5 grund av de inbyggda WordPress API:erna har vi en abstraktionsniv\u00e5 som g\u00f6r att vi kan uppn\u00e5 mycket av samma funktionalitet (om inte samma funktionalitet).<\/p>\n<p>N\u00e4rmare best\u00e4mt pratar jag om <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<\/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=\"Skillnaden mellan cURL- och WordPress-f\u00f6rfr\u00e5gningar\"><\/a><\/p>\n<p>Denna funktion \u00e4r idealisk n\u00e4r HTTP-beg\u00e4ran g\u00f6rs till en godtycklig URL. Webbadressen \u00e4r validerad f\u00f6r att undvika omdirigering och beg\u00e4ran om f\u00f6rfalskningsattacker.<\/p>\n<\/blockquote>\n<p>Jag n\u00e4mner specifikt den s\u00e4kra varianten av <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">denna funktion<\/a> f\u00f6r definitionen ovan (det finns en annan variant, men det \u00e4r viktigt att vidta f\u00f6rsiktighets\u00e5tg\u00e4rder mot godtyckliga webbadresser av s\u00e4kerhetssk\u00e4l).<\/p>\n<h2>cURL och WordPress-f\u00f6rfr\u00e5gningar<\/h2>\n<p>Hur som helst, s\u00e5 hur skulle <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-00-get-curl-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en funktion<\/a> kunna se ut om vi skulle anv\u00e4nda detta cURL-bibliotek?<\/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>Kort sagt (och detta \u00e4r typiskt f\u00f6r de flesta cURL-f\u00f6rfr\u00e5gningar):<\/p>\n<ul>\n<li>initiera cURL-biblioteket,<\/li>\n<li><a href=\"https:\/\/curl.haxx.se\/docs\/manpage.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">st\u00e4ll in alternativ som \u00e4r<\/a> specifika f\u00f6r din beg\u00e4ran (som kommer att variera beroende p\u00e5 n\u00e4mnda beg\u00e4ran),<\/li>\n<li>g\u00f6ra beg\u00e4ran,<\/li>\n<li>utv\u00e4rdera svaret<\/li>\n<li>f\u00e5nga eventuella n\u00f6dv\u00e4ndiga undantag.<\/li>\n<\/ul>\n<p>Och sedan om vi skulle anv\u00e4nda <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-01-safe-remote-get-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">samma variant av koden<\/a> i WordPress?<\/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>Detta \u00e4r mycket mindre och utan tvekan l\u00e4ttare att l\u00e4sa (\u00e5tminstone f\u00f6r de som arbetar i WordPress). N\u00e4r det g\u00e4ller argument s\u00e5 l\u00e4gger jag inte heller in n\u00e5got annat i funktionen \u00e4n URL:en.<\/p>\n<p>Om du l\u00e4ser den l\u00e4nkade API-dokumentationen kommer du att se att vi har viss kontroll \u00f6ver det; det kommer dock att variera beroende p\u00e5 hur du beh\u00f6ver kommunicera med en given slutpunkt.<\/p>\n<p>Hur du hanterar <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_error\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Error<\/a> \u00e4r upp till dig. Att returnera en tom str\u00e4ng \u00e4r s\u00e4llan det b\u00e4sta alternativet; men f\u00f6r detta exempel \u00e4r det tillr\u00e4ckligt. Fallet vi fr\u00e4mst \u00e4r ute efter \u00e4r sj\u00e4lva svaret och det \u00e4r kodens fokus.<\/p>\n<h2>N\u00e4r anv\u00e4nder vi det ena eller det andra?<\/h2>\n<p>N\u00e4r det g\u00e4ller att arbeta med cURL och WordPress fj\u00e4rrf\u00f6rfr\u00e5gningar och best\u00e4mma vilken metod jag ska anv\u00e4nda tenderar jag att f\u00f6lja denna regel:<\/p>\n<ul>\n<li>Om det jag beh\u00f6ver kan uppn\u00e5s med en WordPress API-funktion anv\u00e4nder jag den.<\/li>\n<li>Om inte, anv\u00e4nder jag cURL.<\/li>\n<\/ul>\n<p>Jag kan inte ge en mer solid regel.<\/p>\n<p>Titta ist\u00e4llet p\u00e5 den slutpunkt som du kommunicerar, best\u00e4m vilken niv\u00e5 av kontroll du beh\u00f6ver \u00f6ver f\u00f6rfr\u00e5gan och fatta ett beslut om hur du vill hantera svaret.<\/p>\n<p>D\u00e4rifr\u00e5n b\u00f6r du ha en bra id\u00e9 om vilket bibliotek du ska anv\u00e4nda.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <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 och WordPress fj\u00e4rrf\u00f6rfr\u00e5gningar till\u00e5ter oss mycket av samma funktionalitet. Men vi m\u00e5ste kunna avg\u00f6ra vilket alternativ som \u00e4r b\u00e4st.<\/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":[848,901,807,724],"tags":[1173],"class_list":["post-231169","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=231169"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231169\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/237087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=231169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=231169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=231169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}