2011-03-03 4 views
2

Je me suis moqué d'un formulaire que je prévois d'utiliser pour envoyer des valeurs arbitraires à des URL arbitraires. Je l'utilise principalement pour tester les services web que je développe via un navigateur. La page a <input>s pour le formulaire method et action et de nombreuses paires de contrôles input="text" pour définir les paires nom/valeur qui sont affichées.POSTing charge utile inaltérée

Cela fonctionne à merveille pour mes services qui nécessitent l'encodage par défaut querystring, i.e. .:

POST http://mysite.com/MyService.svc/CheckUsername HTTP/1.1 
User-Agent: Fiddler 
Host: mysite.com 
Content-Length: 15 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

userName=Tester 

Cependant, certains services Web exigent évidemment les données dans d'autres formats. Plus précisément le service que je suis en train de recevoir est accepte XML:

POST http://mysite.com/MyService.svc/checkusername HTTP/1.1 
User-Agent: Fiddler 
Host: mysite.com 
Content-Length: 60 
Content-type: text/xml 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

<CheckUsername> <username>tester</username> </CheckUsername> 

Comment puis-je obtenir un contrôle total sur la charge utile d'un formulaire POST afin que je puisse structurer la charge utile correctement? Idéalement, la solution sera HTML seulement, mais je fais aussi un usage intensif de jQuery sur la page, donc l'utiliser est aussi une option. Je sais que je peux manipuler complètement les données en utilisant $.ajax() mais à moins que je ne me trompe, ce n'est pas une option en raison de la même politique d'origine - Je veux que ce formulaire puisse poster sur n'importe lequel de mes sites sans avoir à le télécharger sur le web serveur.

Répondre

2

Je pense que la seule option ici est un script proxy sur votre serveur qui fera des requêtes POST en utilisant cURL. (Voir passing $_POST values with cURL pour l'exemple de PHP). Au lieu de publier sur le service Web, vous publieriez le script sur votre propre serveur, puis ce script publierait sur le service Web.

Si non pour les demandes inter-domaines, les requêtes POST avec le corps arbitraire peut être facilement:

$.post(
    'http://example.com', 
    '<CheckUsername><username>tester</username></CheckUsername>') 

Vous pouvez également utiliser Flash, CORS ou iframe pour résoudre vos problèmes inter-domaines, mais ceux-ci nécessiteraient la coopération du service Web, c'est-à-dire le fichier crossdomain.xml ou l'en-tête Access-Control-Allow-Origin, ce qui, je suppose, n'est pas une option.

+0

pas la réponse que je voulais entendre, mais merci :) – Jeff

1

Les navigateurs modernes peuvent utiliser AJAX interdomaine (CORS; jQuery le prend en charge dès sa sortie de la boîte) mais le serveur doit l'autoriser en utilisant des en-têtes spéciaux dans sa réponse. En dehors de cela, je ne pense pas que vous pouvez poster quelque chose qui n'est pas encodé et qui ne contient pas au moins un signe =.

+0

cela ressemble à plus de problèmes que cela en vaut la peine. merci pour la réponse si. – Jeff

Questions connexes