Question

Je n'arrive pas à comprendre ce qui se passe. J'utilise HttpWebRequest pour essayer d'envoyer des données vers un autre site. J'essaie de trouver le meilleur moyen de configurer nos pare-feu, mais je suis perdu. En regardant la trace de NetMon, il semble qu’il ignore ce que je lui dis; les en-têtes HTTP que je vois sortent de la requête (pas la requête navigateur à mon serveur, mais la requête mon serveur à serveur distant) ne s'additionne pas.

Http: Request, CONNECT some.random.url:443
Command: CONNECT
URI: some.random.url:443
    Location: some.random.url:443
ProtocolVersion: HTTP/1.1
Host: some.random.url
ProxyConnection: Keep-Alive
HeaderEnd: CRLF

Le TCP DstPort semble également toujours commencer par HTTP (80). Je n'arrive pas à comprendre comment gérer 443 au début, quoi qu'il arrive; SSL commence-t-il avec un port 80 qui négocie avant de commencer "réel"? transmission? Pour démarrer, cette requête semble ignorer tous les paramètres HttpWebRequest que j'essaie de définir avant de lancer la requête: même si je mets HTTP 1.0, ou que keep-alive est défini sur false, elle commence toujours par les en-têtes ci-dessus.

Qu'est-ce que ça fait? J'aimerais savoir comment le laisser passer, mais je ne suis pas sûr de savoir pourquoi il affiche ce comportement?

Code ci-dessous, si cela peut vous aider.

Uri newUri = new Uri("https://some.random.url:443/random");
System.Net.HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(newUri);
wr.Method = "POST";
wr.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] requestBytes = encoding.GetBytes("test");
wr.ContentLength = requestBytes.Length;
System.IO.Stream stream = wr.GetRequestStream(); //FAILS HERE, ServerProtocolViolation

J'ai parcouru Google et d'autres problèmes liés à SSL / HttpWebRequest, mais je ne peux pas trouver de solution miracle.

Était-ce utile?

La solution

Votre problème semble être le serveur proxy entre votre serveur ASP.NET et le serveur distant. Vous pouvez essayer de ne pas utiliser le serveur proxy (wr.Proxy = null), mais cela peut être requis pour la configuration de votre réseau.

Je recommanderais de parler à la personne responsable du réseau sur votre serveur et de vérifier si le proxy prend en charge la transmission SSL (via la commande CONNECT que NET envoie en votre nom).

Autres conseils

J'ai effectué des appels HttpWebRequest via SSL et je n'ai jamais rencontré ce problème. La seule chose que je peux voir que vous faites, ce que je n’ai jamais fait, c’est d’inclure le numéro de port (443) dans l’URL.

.NET doit gérer la création de la connexion SSL sans se faire indiquer le port à utiliser lorsque vous utilisez le protocole https . Si vous ne l'avez pas déjà fait, essayez sans le numéro de port. Si vous avez, alors je suis à court d'idées;)

essayez ceci et laissez-moi savoir comment vous le trouvez!

htw.Credentials = new NetworkCredentials (nom d'utilisateur, mot de passe)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top