2010-08-03 9 views
4

J'ai une application de console que j'ai écrite pour .NET/Windows et dont j'ai soudainement eu besoin sur mon système Unix. Mono a, pour la plupart, eu énormément de succès à fournir cela pour moi.Mono: HttpWebRequest Erreurs SSL sur URI non-SSL

Il y a cependant un petit problème: Les problèmes d'application beaucoup de HttpWebRequests comme il fonctionne, et pour une petite partie de ceux-ci, Mono est de renvoyer une erreur:

Error getting response stream (Write: The authentication or decryption has failed.): SendFailure

Ce message d'erreur semble indiquer une connexion SSL Erreur. Cependant, cette application n'émet aucune requête aux URI sécurisés par SSL (c'est-à-dire que tous les URI sont http: //).

Le code principal en question est la suivante:

HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest; 
req.UserAgent = UserAgent; 
req.AuthenticationLevel = AuthenticationLevel.None; 
req.AllowAutoRedirect = true; 
req.KeepAlive = true; 
req.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); 
req.Timeout = timeout; 

if (useCompression) { 
    req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
} 

Edit: Aux fins de l'exécution de ce code, vous pouvez définir des variables muettes comme suit:

string url = "http://example.com"; 
string UserAgent = "WhateverBot"; 
int timeout = 5000; 
bool useCompression = true; 

Il devrait être a noté que le code fonctionne sans aucun problème sur Windows/.NET.

+0

pouvez-vous fournir un code d'exemple compilable et une ou deux URL qui échouent? – santa

+1

Etes-vous sûr que l'URL demandée ne vous redirige pas vers une version SSL? Est-ce que cela fonctionne dans l'environnement Windows? Avez-vous consulté un outil de suivi http pour voir les demandes/réponses? –

+0

@santa - Terminé. @Jaroslav Jandek - Il n'y a pas de problèmes sur Windows. Je n'ai aucune preuve, mais je pense qu'il est hautement improbable que je sois redirigé vers un site Web sécurisé: Cela se produit pour une variété d'URL différentes (et une variété d'hôtes différents), mais seulement pour une petite partie de tous demandes Il y a certains aspects pratiques qui rendent la surveillance http difficile, mais je considérerai cela comme une option si une solution n'est pas trouvée facilement. – Nick

Répondre

1

J'ai également eu ce problème lors de l'exécution de Mono sous Windows même lorsque l'URL n'est pas HTTPS. Laissez-moi dire ceci fort: SANS REDIRECTED.

La solution a été d'utiliser le hack:

System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate 
{ 
    return true; 
}; 

Je pense que Mono ne regarde pas dans le fichier de clés de Windows pour les certificats si ne trouve pas si HTTPWebXXXX est pas initialisés correctement et échoue de manière incorrecte. J'imagine que n'importe qui qui prend la peine de reproduire votre erreur saura ce qu'il fait avec Mono (contrairement à moi par exemple) et aura donc son environnement configuré correctement et ne pourra pas reproduire ce problème du monde réel.