Faire une webrequest

Résolu/Fermé
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 17 nov. 2016 à 14:17
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 17 nov. 2016 à 15:21
Salut à tous!

Pour faire simple, j'ai côté serveur un code qui me permet de faire une requête http (pour info, il y a un listner sur une application de gestion de port com).

L application que je fais ayant besoin d être la plus réactive possible, j'aurai voulu faire la requete coté client plutot que serveur via XMLHttpRequest, histoire de gagner quelques ms.

Voici ce qui est envoyé côté serveur, et ca fonctionne:

Request-Header: POST / HTTP/1.1
Request-Header: Content-Length: 179
Request-Header: Content-Type: text/plain
Request-Header: Accept: */*
Request-Header: Host: 1.2.3.4:85
Request-Header: User-Agent:
Request-Header: Connection: close
Request-Header: Host: 1.2.3.4
Request-Header: Dest:
Request-Body:
<xml>des trucs xml</xml>


(l ip est bien sûr fausse)

j'ai dont en JS fais : (là c est en synchrone ce qui me convient )
		function httpGetAsync(theUrl, sXML, callback)
			{
			    var xmlHttp = new XMLHttpRequest();
			    /*xmlHttp.onreadystatechange = function() { 
			        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
			            callback(xmlHttp.responseText);
			    }*/
			    xmlHttp.open("POST", theUrl, false); // true for asynchronous 
			    xmlHttp.send(sXML);
			  alert(xmlHttp.responseText);
			}


J'ai tenté via setRequestHeader de setter mes infos de manière à me calquer sur les headers fonctionnant mais certains ne me permettent pas des les modifier: par exemple Host est interdit (vous remarquerez que dans la requete de base l info est doublé ... je ne sais pas comment celui qui a fait le listener à codé mais a prioris c est mandatory ..), ou encore certains sont sans effet (tel que connexion que je voudrais setter à close).

Bref voilà le header envoyé :
 Request-Header: POST / HTTP/1.1
Request-Header: Content-Type: text/plain
Request-Header: Accept: */*
Request-Header: DNT: 1
Request-Header: Accept-Language: de-CH
Request-Header: Accept-Encoding: gzip, deflate
Request-Header: User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Request-Header: Host: 2.23.45.170:85
Request-Header: Content-Length: 179
Request-Header: Connection: Keep-Alive
Request-Header: Pragma: no-cache
Request-Body:
<xml>des trucs xml</xml>



en ayant setté :
				xmlHttp.setRequestHeader("Accept", "*/*");
				xmlHttp.setRequestHeader("Content-Type", "text/plain");
				xmlHttp.setRequestHeader("Accept-Encoding", "");
				xmlHttp.setRequestHeader("Connection", "close");



Je crois que ce n'est pas possible, mais est-ce qu il y aurai un moyen d'envoyer un header que je ferai de a à z? D'autres classes pour faire de la request?
Ou un moyen d'ouvrir un socket et d'écrire ? (chose que je n ai pas encore regardé et que je vais faire)

merci d'avance, et s'il y a d autres idées je suis preneur ^^

naga

1 réponse

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 252
17 nov. 2016 à 15:21
J'ai ma solution mais je ne penses pas qu elle sera applicable dans d'autres contextes: Comme on le voit dans mon post, ce qui fonctionnait contenait deux "Host" dans le header.
Avec XMLHttpRequest on ne peux pas ajouter de second "Host" (ni même l editer), mais en faisant:


xmlHttp.setRequestHeader("Garb", "\r\nHost: 1.2.3.4");


Ca résout mon problème.

naga
0