{"id":231650,"date":"2022-12-26T13:11:00","date_gmt":"2022-12-26T10:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231650"},"modified":"2022-12-26T13:11:49","modified_gmt":"2022-12-26T10:11:49","slug":"usando-curl-para-determinar-se-o-url-especificado-e-uma-pagina-valida","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-curl-para-determinar-se-o-url-especificado-e-uma-pagina-valida\/","title":{"rendered":"Usando cURL para determinar se o URL especificado \u00e9 uma p\u00e1gina v\u00e1lida"},"content":{"rendered":"\n<p>No in\u00edcio deste m\u00eas, escrevi sobre encontrar o <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/encontrando-o-destino-de-um-redirecionamento-com-php\/\" title=\"destino de um redirecionamento usando cURL em PHP\">destino de um redirecionamento usando cURL em PHP<\/a>. Esta pode ser uma fun\u00e7\u00e3o \u00fatil para usar sempre que:<\/p>\n<ul>\n<li>voc\u00ea sabe que os URLs com os quais est\u00e1 lidando v\u00e3o redirecionar,<\/li>\n<li>voc\u00ea sabe que o n\u00famero de redirecionamentos ser\u00e1 limitado a um.<\/li>\n<\/ul>\n<p>\u00c9 verdade que, neste \u00faltimo caso, est\u00e1 se tornando mais dif\u00edcil porque sites como, digamos, o Twitter, t\u00eam v\u00e1rios redirecionamentos antes de voc\u00ea chegar ao destino.<\/p>\n<p>Mas isso \u00e9 assunto para outro post (a menos que voc\u00ea queira apenas implementar uma maneira recursiva ou iterativa de trabalhar com solicita\u00e7\u00f5es at\u00e9 encontrar o destino final).<\/p>\n<p>De qualquer forma, h\u00e1 outra coisa que tamb\u00e9m pode ser \u00fatil sempre que voc\u00ea estiver trabalhando com redirecionamentos e com cURL, e isso \u00e9 determinar se a URL especificada leva voc\u00ea a uma p\u00e1gina v\u00e1lida.<\/p>\n<h2>A URL especificada \u00e9 uma p\u00e1gina v\u00e1lida?<\/h2>\n<p>O c\u00f3digo neste post n\u00e3o ser\u00e1 totalmente diferente do que voc\u00ea pode ter visto em posts anteriores; no entanto, as principais coisas que vamos fazer s\u00e3o as seguintes:<\/p>\n<ul>\n<li>inicialize cURL com o URL que nos foi fornecido,<\/li>\n<li>defina o valor CUROPT_RETURNTRANSFER como true (que retorna o valor da transfer\u00eancia como uma string),<\/li>\n<li>e, em seguida, avalie o c\u00f3digo de status HTTP retornado da solicita\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Voc\u00ea pode ler tudo sobre os c\u00f3digos <a href=\"https:\/\/httpstatuses.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">neste site,<\/a> mas os dois com os quais estamos mais preocupados, pelo menos para este post, s\u00e3o 404 e 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=\"Usando cURL para determinar se o URL especificado \u00e9 uma p\u00e1gina v\u00e1lida\"><\/a><\/p>\n<p>Ent\u00e3o, primeiro, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ad96af9aa3007807686ac87b630dcd7\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o c\u00f3digo:<\/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>E aqui est\u00e1 como funciona:<\/p>\n<ol>\n<li>a fun\u00e7\u00e3o aceita uma URL como argumento,<\/li>\n<li>inicializamos o cURL com as configura\u00e7\u00f5es adequadas e, em seguida, executamos a solicita\u00e7\u00e3o,<\/li>\n<li>lemos o valor do c\u00f3digo de status armazenado na resposta,<\/li>\n<li>fechamos o handle cURL e ent\u00e3o retornamos a avalia\u00e7\u00e3o do c\u00f3digo de status.<\/li>\n<\/ol>\n<p>Parece bastante simples, n\u00e3o \u00e9?<\/p>\n<p>E, em geral, \u00e9. Voc\u00ea pode ter que fazer alguns ajustes por conta pr\u00f3pria para seu c\u00f3digo de status, ou voc\u00ea pode querer analisar as informa\u00e7\u00f5es da resposta. Isso pode ser feito analisando a string, usando express\u00f5es regulares ou mais. Mas isso est\u00e1 al\u00e9m do escopo deste post.<\/p>\n<p>No m\u00ednimo, isso informar\u00e1 se o URL para o qual voc\u00ea est\u00e1 sendo direcionado \u00e9 uma p\u00e1gina v\u00e1lida ou n\u00e3o.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>H\u00e1 outra coisa que \u00e9 \u00fatil sempre que voc\u00ea est\u00e1 trabalhando com redirecionamentos e com cURL: determinar se a URL especificada leva voc\u00ea a uma p\u00e1gina v\u00e1lida.<\/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":[898,722,837,806,846,867],"tags":[1170],"class_list":["post-231650","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231650"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231650\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236354"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}