{"id":231009,"date":"2022-12-26T13:40:00","date_gmt":"2022-12-26T10:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231009"},"modified":"2022-12-26T13:43:57","modified_gmt":"2022-12-26T10:43:57","slug":"uzywanie-curl-do-okreslenia-czy-okreslony-adres-url-jest-prawidlowa-strona","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/uzywanie-curl-do-okreslenia-czy-okreslony-adres-url-jest-prawidlowa-strona\/","title":{"rendered":"U\u017cywanie cURL do okre\u015blenia, czy okre\u015blony adres URL jest prawid\u0142ow\u0105 stron\u0105"},"content":{"rendered":"\n<p>Na pocz\u0105tku tego miesi\u0105ca pisa\u0142em o znalezieniu <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/znajdowanie-miejsca-docelowego-przekierowania-za-pomoca-php\/\" title=\"miejsca docelowego przekierowania za pomoc\u0105 cURL w PHP\">miejsca docelowego przekierowania za pomoc\u0105 cURL w PHP<\/a>. Mo\u017ce to by\u0107 przydatna funkcja, kt\u00f3rej mo\u017cna u\u017cy\u0107, gdy:<\/p>\n<ul>\n<li>znasz adresy URL, z kt\u00f3rymi masz do czynienia, b\u0119d\u0105 przekierowywa\u0107,<\/li>\n<li>wiesz, \u017ce liczba przekierowa\u0144 b\u0119dzie ograniczona do jednego.<\/li>\n<\/ul>\n<p>To prawda, \u017ce \u200b\u200bw tym drugim przypadku staje si\u0119 to coraz trudniejsze, poniewa\u017c witryny takie jak, powiedzmy, Twitter, maj\u0105 wiele przekierowa\u0144, zanim dotrzesz do celu.<\/p>\n<p>Ale to temat na inny post (chyba \u017ce chcesz po prostu zaimplementowa\u0107 rekurencyjny lub iteracyjny spos\u00f3b pracy z \u017c\u0105daniami, a\u017c znajdziesz ostateczne miejsce docelowe).<\/p>\n<p>W ka\u017cdym razie jest jeszcze jedna rzecz, kt\u00f3ra mo\u017ce by\u0107 przydatna, gdy pracujesz z przekierowaniami i cURL, a to okre\u015bla, czy okre\u015blony adres URL prowadzi do prawid\u0142owej strony.<\/p>\n<h2>Czy podany adres URL jest prawid\u0142ow\u0105 stron\u0105?<\/h2>\n<p>Kod w tym po\u015bcie nie b\u0119dzie zupe\u0142nie inny ni\u017c ten, kt\u00f3ry mog\u0142e\u015b zobaczy\u0107 w poprzednich postach; jednak kluczowe rzeczy, kt\u00f3re zamierzamy zrobi\u0107, s\u0105 nast\u0119puj\u0105ce:<\/p>\n<ul>\n<li>zainicjowa\u0107 cURL z podanym adresem URL,<\/li>\n<li>ustawi\u0107 warto\u015b\u0107 CUROPT_RETURNTRANSFER na true (co zwraca warto\u015b\u0107 przelewu w postaci ci\u0105gu),<\/li>\n<li>a nast\u0119pnie oce\u0144 kod stanu HTTP, kt\u00f3ry jest zwracany z \u017c\u0105dania.<\/li>\n<\/ul>\n<p>Mo\u017cesz przeczyta\u0107 wszystko o kodach na <a href=\"https:\/\/httpstatuses.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tej stronie,<\/a> ale dwa, na kt\u00f3rych najbardziej nas niepokoi, przynajmniej w tym po\u015bcie, to 404 i 200.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159997-61e70253043e6.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-159997-61e70253043e6.png\" alt=\"U\u017cywanie cURL do okre\u015blenia, czy okre\u015blony adres URL jest prawid\u0142ow\u0105 stron\u0105\"><\/a><\/p>\n<p>Wi\u0119c najpierw <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ad96af9aa3007807686ac87b630dcd7\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kod:<\/a><\/p>\n<pre><code>&lt;?php\n\/**\n * Determines if a specific URL returns a valid page. This is experimental and it is based on\n * the status code.\n *\n * @param string $url the url to evaluate\n *\n * @return bool true if the URL returns a status code of 404; otherwise, false\n *\/\npublic function isValidUrl(string $url): bool\n{\n    $curl = curl_init($url);\n\n    curl_setopt($curl, CURLOPT_URL, $url);\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\n\n    $response = curl_exec($curl);\n\n    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);\n    curl_close($curl);\n\n    return (404 !== $httpCode);\n}<\/code><\/pre>\n<p>A oto jak to dzia\u0142a:<\/p>\n<ol>\n<li>funkcja przyjmuje jako argument adres URL,<\/li>\n<li>inicjujemy cURL z odpowiednimi ustawieniami, a nast\u0119pnie realizujemy \u017c\u0105danie,<\/li>\n<li>odczytujemy warto\u015b\u0107 kodu statusu, kt\u00f3ry jest przechowywany z odpowiedzi,<\/li>\n<li>zamykamy uchwyt cURL, a nast\u0119pnie zwracamy ocen\u0119 kodu statusu.<\/li>\n<\/ol>\n<p>Wydaje si\u0119 to do\u015b\u0107 proste, prawda?<\/p>\n<p>I og\u00f3lnie tak jest. By\u0107 mo\u017ce b\u0119dziesz musia\u0142 sam troch\u0119 poprawi\u0107 sw\u00f3j kod statusu lub mo\u017cesz chcie\u0107 przeanalizowa\u0107 informacje z odpowiedzi. Mo\u017cna to zrobi\u0107, analizuj\u0105c ci\u0105g, u\u017cywaj\u0105c wyra\u017ce\u0144 regularnych lub nie tylko. Ale to wykracza poza zakres tego postu.<\/p>\n<p>W absolutnym minimum powie Ci to, czy adres URL, na kt\u00f3ry zostaniesz przeniesiony, jest prawid\u0142ow\u0105 stron\u0105, czy nie.<\/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>Jest jeszcze jedna rzecz, kt\u00f3ra jest przydatna, gdy pracujesz z przekierowaniami i cURL: okre\u015blenie, czy okre\u015blony adres URL prowadzi do prawid\u0142owej strony.<\/p>\n","protected":false},"author":1,"featured_media":236354,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,805,836,845,866],"tags":[1169],"class_list":["post-231009","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231009","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=231009"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231009\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236354"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=231009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=231009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=231009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}