{"id":231271,"date":"2022-12-26T13:10:00","date_gmt":"2022-12-26T10:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231271"},"modified":"2022-12-26T13:11:41","modified_gmt":"2022-12-26T10:11:41","slug":"uso-de-curl-para-determinar-si-la-url-especificada-es-una-pagina-valida","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/uso-de-curl-para-determinar-si-la-url-especificada-es-una-pagina-valida\/","title":{"rendered":"Uso de cURL para determinar si la URL especificada es una p\u00e1gina v\u00e1lida"},"content":{"rendered":"\n<p>A principios de este mes, escrib\u00ed sobre encontrar el <a href=\"https:\/\/wordpress.mediadoma.com\/es\/encontrar-el-destino-de-una-redireccion-con-php\/\" title=\"destino de una redirecci\u00f3n usando cURL en PHP\">destino de una redirecci\u00f3n usando cURL en PHP<\/a>. Esta puede ser una funci\u00f3n \u00fatil para usar siempre que:<\/p>\n<ul>\n<li>sabes que las URL con las que est\u00e1s tratando van a redirigirse,<\/li>\n<li>sabes que el n\u00famero de redireccionamientos se limitar\u00e1 a uno.<\/li>\n<\/ul>\n<p>Por supuesto, en el \u00faltimo caso, se est\u00e1 volviendo m\u00e1s dif\u00edcil porque los sitios como, por ejemplo, Twitter, tienen m\u00faltiples redireccionamientos antes de llegar al destino.<\/p>\n<p>Pero ese es un tema para otra publicaci\u00f3n (a menos que solo desee implementar una forma recursiva o iterativa de trabajar con solicitudes hasta encontrar el destino final).<\/p>\n<p>De todos modos, hay otra cosa que tambi\u00e9n puede ser \u00fatil siempre que est\u00e9s trabajando con redireccionamientos y con cURL, y es determinar si la URL especificada te lleva a una p\u00e1gina v\u00e1lida.<\/p>\n<h2>\u00bfLa URL especificada es una p\u00e1gina v\u00e1lida?<\/h2>\n<p>El c\u00f3digo en esta publicaci\u00f3n no ser\u00e1 del todo diferente de lo que puede haber visto en publicaciones anteriores; sin embargo, las cosas clave que vamos a hacer son las siguientes:<\/p>\n<ul>\n<li>inicializar cURL con la URL que nos han proporcionado,<\/li>\n<li>establezca el valor CUROPT_RETURNTRANSFER en verdadero (que devuelve el valor de la transferencia como una cadena),<\/li>\n<li>y luego eval\u00fae el c\u00f3digo de estado HTTP que se devuelve de la solicitud.<\/li>\n<\/ul>\n<p>Puede leer todo sobre los c\u00f3digos en <a href=\"https:\/\/httpstatuses.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">este sitio,<\/a> pero los dos que m\u00e1s nos preocupan, al menos para esta publicaci\u00f3n, son 404 y 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=\"Uso de cURL para determinar si la URL especificada es una p\u00e1gina v\u00e1lida\"><\/a><\/p>\n<p>Entonces, primero, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ad96af9aa3007807686ac87b630dcd7\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el 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>Y as\u00ed es como funciona:<\/p>\n<ol>\n<li>la funci\u00f3n acepta una URL como argumento,<\/li>\n<li>inicializamos cURL con la configuraci\u00f3n adecuada, y luego ejecutamos la solicitud,<\/li>\n<li>leemos el valor del c\u00f3digo de estado que est\u00e1 almacenado desde la respuesta,<\/li>\n<li>cerramos el identificador cURL y luego devolvemos la evaluaci\u00f3n del c\u00f3digo de estado.<\/li>\n<\/ol>\n<p>Parece bastante simple, \u00bfno?<\/p>\n<p>Y, en general, lo es. Es posible que deba hacer algunos ajustes por su cuenta para su c\u00f3digo de estado, o es posible que desee analizar la informaci\u00f3n de la respuesta. Esto se puede hacer analizando la cadena, usando expresiones regulares o m\u00e1s. Pero eso est\u00e1 m\u00e1s all\u00e1 del alcance de esta publicaci\u00f3n.<\/p>\n<p>Como m\u00ednimo, esto le dir\u00e1 si la URL a la que est\u00e1 siendo redirigido es una p\u00e1gina v\u00e1lida o no.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hay otra cosa que es \u00fatil cuando trabaja con redireccionamientos y cURL: determinar si la URL especificada lo lleva a una 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":[892,716,831,800,840,861],"tags":[1172],"class_list":["post-231271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-guia-para-principiantes","category-php-2","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231271"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231271\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/236354"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}