2014-04-17 1 views
0

En utilisant le code suivant ici pour déterminer si une URL est valide ou non:400 Erreur lors de la vérification si le site Web est valide avec HttpWebRequest et HttpWebResponse Pourquoi?

public bool UrlIsValid(string url) 
{ 
    if(!url.ToLower().StartsWith("http://") && !url.ToLower().StartsWith("https://")) 
    { 
     url = "http://" + url; 
    } 

    try 
    { 
     HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; 
     request.Timeout = 5000; //set the timeout to 5 seconds to keep the user from waiting too long for the page to load 
     request.Method = "HEAD"; //Get only the header information -- no need to download any content 

     HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

     int statusCode = (int)response.StatusCode; 
     if (statusCode >= 100 && statusCode < 400) //Good requests 
     { 
      return true; 
     } 
     else if (statusCode >= 500 && statusCode <= 510) //Server Errors 
     { 
      log.Warn(String.Format("The remote server has thrown an internal error. Url is not valid: {0}", url)); 
      return false; 
     } 
    } 
    catch (WebException ex) 
    { 
     if (ex.Status == WebExceptionStatus.ProtocolError) //400 errors 
     { 
      log.Warn(String.Format("400 Error logged: {0}", url)); 
      return false; 
     } 
     else 
     { 
      log.Warn(String.Format("Unhandled status [{0}] returned for url: {1}", ex.Status, url), ex); 
     } 
    } 
    catch (Exception ex) 
    { 
     log.Error(String.Format("Could not test url {0}.", url), ex); 
    } 
    return false; 
} 

Le problème est qu'il semble revenir faux avec l'adresse suivante: https://www.paypal.com ou même avec http://www.paypal.com me donnant un 400 erreur dans les journaux. Pourquoi donc? Y a-t-il moyen de contourner cela?

Répondre

0

Votre code est approprié pour d'autres sites.

PayPal ne doit pas répondre aux requêtes HEAD.

Le System.Net.WebException est revenu dit « Unhandled »

La façon de contourner cela est plus simple d'utiliser un GET.

+0

Devrais-je changer beaucoup de code si j'utilise un 'GET' ou est-ce juste un simple passage de' HEAD' à 'GET' dans le code? –

+1

request.Method = "GET" devrait le faire. –

Questions connexes