{"id":228454,"date":"2022-10-23T15:51:00","date_gmt":"2022-10-23T12:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228454"},"modified":"2022-11-09T02:31:27","modified_gmt":"2022-11-08T23:31:27","slug":"zdalne-zadania-za-pomoca-wp_safe_remote_get","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/zdalne-zadania-za-pomoca-wp_safe_remote_get\/","title":{"rendered":"Zdalne \u017c\u0105dania za pomoc\u0105 wp_safe_remote_get"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/zdalne-zadania-za-pomoca-wp_remote_get\/\" title=\"Wczoraj\" >Wczoraj<\/a> udost\u0119pni\u0142em post o tym, jak u\u017cywa\u0107 <code>wp_remote_get<\/code>, ale pomin\u0105\u0142em alternatywn\u0105 funkcj\u0119: <code>wp_safe_remote_get<\/code>. Pierwotnym celem by\u0142o wykorzystanie pierwszego postu do pokazania:<\/p>\n<ol>\n<li>Co akceptuje oryginalna funkcja,<\/li>\n<li>Jak korzysta\u0107 z oryginalnej funkcji,<\/li>\n<li>Co zwraca oryginalna funkcja,<\/li>\n<li>Jak wygl\u0105da wdro\u017cenie.<\/li>\n<\/ol>\n<p>A potem zamierza\u0142em rzuci\u0107 okiem na <code>wp_safe_remote_get<\/code>. Ale jest wyzwanie: mam m\u0105drych przyjaci\u00f3\u0142. Nied\u0142ugo po opublikowaniu posta otrzymuj\u0119 odpowied\u017a od <a href=\"https:\/\/twitter.com\/royboy789\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Roya<\/a> :<\/p>\n<p>Dzi\u0119ki, Roy! (Pami\u0119taj, aby <a href=\"https:\/\/hiroy.club\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">powiedzie\u0107 mu \u201eCze\u015b\u0107!&quot;<\/a>. \ud83d\ude42<\/p>\n<p>Ale powa\u017cnie, kontynuacja wczorajszego postu jest dok\u0142adnie taka: <code>wp_safe_remote_get<\/code>. I jest to jak okre\u015bli\u0107 r\u00f3\u017cnic\u0119 w tych dw\u00f3ch funkcjach i kiedy u\u017cyjesz jednej nad drug\u0105.<\/p>\n<h2>wp_safe_remote_get<\/h2>\n<p>Prosto z dokumentacji API <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dowiadujemy si\u0119<\/a> :<\/p>\n<blockquote>\n<p>Ta funkcja jest idealna, gdy \u017c\u0105danie HTTP jest kierowane do dowolnego adresu URL. Adres URL jest weryfikowany, aby unikn\u0105\u0107 przekierowa\u0144 i atak\u00f3w fa\u0142szowania \u017c\u0105da\u0144.<\/p>\n<\/blockquote>\n<p>I podobnie jak jego odpowiednik, akceptuje adres URL i szereg argument\u00f3w, kt\u00f3re mog\u0105 okre\u015bli\u0107 spos\u00f3b wykonania \u017c\u0105dania.<\/p>\n<p>Co wi\u0119cej, podobnie jak <code>wp_remote_get<\/code>, zwraca r\u00f3wnie\u017c tablic\u0119 danych odpowiedzi lub instancj\u0119, <code>WP_Error<\/code>je\u015bli \u017c\u0105danie si\u0119 nie powiedzie.<\/p>\n<p>Korzystanie z tej funkcji nie r\u00f3\u017cni si\u0119 od poprzedniej, ale rodzi pytanie:<\/p>\n<p>Kiedy u\u017cywamy jednego nad drugim? Dok\u0142adniej, kiedy u\u017cywamy <code>wp_remote_get<\/code>versus <code>wp_safe_remote_get<\/code>?<\/p>\n<h3>Przeczytaj \u017ar\u00f3d\u0142o<\/h3>\n<p>Kiedy masz do czynienia z tak\u0105 sytuacj\u0105, pierwsz\u0105 najlepsz\u0105 rzecz\u0105 do zrobienia jest przeczytanie \u017ar\u00f3d\u0142a:<\/p>\n<ol>\n<li><a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/4.7\/src\/wp-includes\/http.php#L168\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>wp_remote_get<\/code><\/a><\/li>\n<li><a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/4.7\/src\/wp-includes\/http.php#L67\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>wp_safe_remote_get<\/code><\/a><\/li>\n<\/ol>\n<p>Je\u015bli przeczytasz powy\u017csze linki, zauwa\u017cysz, \u017ce ten ostatni odrzuca \u201eniebezpieczne adresy URL&#8221;, kt\u00f3re s\u0105 okre\u015blane przez <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_http_validate_url\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_http_validate_url<\/a> w serii zaawansowanych kontroli.<\/p>\n<h3>Ale nadal, czego u\u017cywam?<\/h3>\n<p>To wci\u0105\u017c pozostawia pytanie bez odpowiedzi, prawda? My\u015bl\u0119, \u017ce \u0142atwo jest zrobi\u0107 og\u00f3lne o\u015bwiadczenie, \u017ce zawsze powiniene\u015b u\u017cywa\u0107 wp_safe_remote_get (lub wp_safe_remote_post, je\u015bli o to chodzi).<\/p>\n<p>Wszystkie projekty s\u0105 jednak inne.<\/p>\n<p>Na przyk\u0142ad, je\u015bli pracujesz nad wtyczk\u0105, kt\u00f3ra b\u0119dzie u\u017cywana tylko w intranecie i masz kontrol\u0119 nad, powiedzmy, bia\u0142\u0105 list\u0105 adres\u00f3w URL, kt\u00f3re mo\u017cna przekaza\u0107 do funkcji, mo\u017cesz u\u017cy\u0107 tego pierwszego.<\/p>\n<p>Je\u015bli jednak udost\u0119pniasz to drugie u\u017cytkownikom, zawsze u\u017cywaj bezpiecznej wersji funkcji.<\/p>\n<h2>W skr\u00f3cie<\/h2>\n<p>Moja praktyczna zasada jest taka (i jest podobna do sanityzacji):<\/p>\n<p>Je\u015bli u\u017cytkownicy zamierzaj\u0105 wchodzi\u0107 w interakcj\u0119 z funkcj\u0105, upewnij si\u0119, \u017ce korzystaj\u0105 z najbezpieczniejszej mo\u017cliwej wersji kodu.<\/p>\n<p>W przeciwnym razie zagro\u017cone jest zbyt wiele.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je\u015bli nie masz pewno\u015bci, kiedy u\u017cy\u0107 wp_remote_get lub wp_safe_remote_get, by\u0107 mo\u017ce ten post pomo\u017ce ci okre\u015bli\u0107, kiedy jest to najlepsze.<\/p>\n","protected":false},"author":1,"featured_media":168025,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,866,815],"tags":[1169],"class_list":["post-228454","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-wordpress-7","category-wtyczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228454"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228454\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/168025"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}