Jump to content


Photo

checking if a HTTPS server is available


  • Please log in to reply
2 replies to this topic

#1 poizn

poizn
  • Members
  • PipPipPip
  • Advanced Member
  • 30 posts

Posted 21 September 2006 - 02:24 PM

Hi everybody

I need to check if a URL is up, so i searched the net and people suggested that you send a HEAD request to the server and check the result (code to follow)

  function url_exists($url) { 
//could have used urlencode - but this works better ;) 
    $url = preg_replace("# #" , "%20" , $url); 
    $a_url = parse_url($url); 
//break the url into scheme, host, post ect... 
    if(!isset($a_url["port"])) { 
      if(strtolower($a_url["scheme"]) == "https") 
        $a_url["port"] = 443; 
      else 
        $a_url["port"] = 80; 
    } 
    if(isset($a_url["host"]) && $a_url["host"] != gethostbyname($a_url["host"])) { 
//open socket to host X on port Y 
      if(!$fid = fsockopen($a_url["host"] , $a_url["port"])) 
        return false; 
      $page = isset($a_url["path"])?$a_url["path"]:"/"; 
      $page .= isset($a_url["query"])?"?".$a_url["query"]:""; 
//send request to server 
      fputs($fid , "HEAD $page HTTP/1.0\r\nHost: ".$a_url["host"]."\r\n\r\n"); 
      $head = fread($fid , 4096); 
      fclose($fid); 
//return true or false based on what the server returns 
      return preg_match("#^HTTP/.*\s+[200|302]+\s#i" , $head); 
    } else { 
      return false; 
    } 
  } 

This function works pretty cool, except for when you try a HTTPS server.
This is what i get if i print $head on some HTTPS url's

[server_response]
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
[/server_respone]

Does anyone know "how to speak HTTPS"?

Any help will be appreciated

Thanks in advance

#2 Daniel0

Daniel0
  • Staff Alumni
  • Advanced Member
  • 11,956 posts

Posted 21 September 2006 - 06:40 PM

Sorry, wrong forum :)

#3 poizn

poizn
  • Members
  • PipPipPip
  • Advanced Member
  • 30 posts

Posted 22 September 2006 - 10:07 AM

to everybody looking at this post now, i finally got the answer from another forum

You have to put ssl:// before the hostname for it to work properly. Here is an example using pfsockopen, but it should work with fsockopen.

http://www.php.net/m...kopen.php#67395


thanks




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users