Dans mon cas, la problématique est différente, car je maitrise le code du serveur et du client (HTTP), mais le client via WebRequest.GetResponse() partait, tout de même, en exception.
J'ai essayé toutes les astuces du Net (Keep-Active, HTTP1/0, UnsafeHeaderParsing, etc.). Mon erreur était de penser que le souci venait du client, car, après une traçabilité, le serveur envoyait bien le contenu attendu (un fichier html).
Le POST fonctionnait et non le GET, bref de quoi s'arracher les cheveux... Alors que le souci n'était pas du client, mais bien de la partie serveur, comme l'indique le message d'erreur généré par l'exception.
Le serveur ne renvoi pas dans l'entête HTTP (headers) le bon contenu ou un contenu attendu par le traitement du client. C'est la raison aussi que sur certains forum, des utilisateurs indiquent que cela fonctionne avec tel site et pas un autre.
Bref, dans mon cas, la solution a été de faire en sorte que le serveur retour un entête adapté du genre :
HTTP/1.1 200 OK
Date: yyyy-MM-dd
Server: hostname
Content-Length: taille du contenu
Content-Type: type mime du contenu, par exemple html
ligne vide
ligne vide
contenu via un tableau de Byte
L'appel WebRequest.GetResponse() doit dissocier l'entête et le corps du contenu. Le fait que le serveur envoi uniquement le contenu provoque une Exception côté client.
Cet exemple ne va pas résoudre tous les cas, mais j'espère que cela pourra mettre sur une piste adaptée, ceux qui recherchent une solution.
Validé sous Visual Studio 2013 et .NET 4.6.1
Partager