2008-09-02 15 views
5

Je dois POSTER certains paramètres à une URL en dehors de mon réseau, et les développeurs de l'autre côté m'ont demandé de ne pas utiliser les paramètres HTTP: à la place, je dois poster mes valeurs-clés dans HTTP En-têtes.HTTP POST - Je suis coincé

Le fait est que je ne comprends pas vraiment ce qu'ils veulent dire: J'ai essayé d'utiliser un poste ajax-like, avec des objets XMLHTTP, et aussi j'ai essayé d'écrire dans l'en-tête avec quelque chose comme

Request.Headers.Add(key,value); 

mais je ne peux pas (exception du cadre); J'ai essayé l'inverse, en utilisant l'objet Response comme

Response.AppendHeader("key", "value"); 

puis rediriger vers la page ... mais cela ne fonctionne pas, aussi bien.

Il est évident, je pense, que je suis coincé là, toute aide?


EDIT j'ai oublié de vous dire que mon environnement est .Net 2.0, C#, sur Windows Server 2003. L'exception que je suis arrivé est

System.PlatformNotSupportedException was unhandled by user code 
    Message="Operation is not supported on this platform." 
    Source="System.Web" 

Cela ressemble à elle est causée par mon tentative de Request.Add, MS il y a un an a publié quelques corrections de sécurité qui ne le permettent pas.

Répondre

1

Comme @lassevk dit, une redirection ne fonctionnera pas.

Vous devez utiliser la classe WebRequest pour effectuer un POST HTTP à partir de votre page ou de votre application. Il y a un exemple here.

0

Vous devriez poster plus d'informations.

Par exemple, est-ce C#? Ca ressemble à ça, mais j'ai peut-être tort.

En outre, vous dites que vous obtenez une exception, quel est le type d'exception et le message? En tout cas, vous ne pouvez pas rediriger vers une page pour le POST, vous devez l'envoyer depuis le navigateur, pas depuis la redirection du serveur, donc si vous voulez automatiser cela, je suppose que vous devez générer une page html avec une balise de formulaire, avec des champs de saisie cachés, puis soumettez-la avec javascript.

0

Je pense qu'ils veulent dire qu'ils ne veulent pas que vous utilisiez des paramètres d'URL (GET). Si vous utilisez des en-têtes http, il n'y a plus vraiment d'interrogation via POST.

0

Quelle langue/cadre?

En utilisant Python et httplib2, vous devriez être en mesure de faire quelque chose comme:

http = httplib2.Http() 
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode('')) 
0

Je crois que l'objet de demande accepterait seulement un certain ensemble de têtes prédéfinies.

Il existe une énumération qui répertorie tous les en-têtes HTTP pris en charge.

Mais je ne me souviens pas ce au moment ... Je vais le chercher dans une seconde ...

1

Jetez un oeil à HttpWebRequest. Vous devriez être capable de construire une requête à l'URL en question en utilisant HttpWebRequest.Method = "POST".

3

Avez-vous essayé le cours WebClient? Un exemple pourrait ressembler à:

 WebClient client = new WebClient(); 
     NameValueCollection data = new NameValueCollection(); 
     data["var1"] = "var1"; 
     client.UploadValues("http://somewhere.com/api", "POST", data); 
0

Je l'ai testé votre scénario en utilisant 2 pages échantillon à l'aide l'option XMLHttpRequest. Les en-têtes personnalisés sont disponibles dans la page aspx publiée en utilisant XmlHttpRequest.

Créez les 2 pages suivantes. Assurez-vous que la page aspx est dans une solution, de sorte que vous pouvez exécuter le dans le débogueur, définir le point d'arrêt et inspecter la collection Request.Header.

<html>

< tête >

&lt; script language="javascript"&gt; 

function SendRequest() 
{ 
    var r = new XMLHttpRequest(); 
    r.open('get', 'http://localhost/TestSite/CheckHeader.aspx'); 
    r.setRequestHeader('X-Test', 'one'); 
    r.setRequestHeader('X-Test', 'two'); 
    r.send(null); 

} 
&lt; script/&gt; 

</tête > <corps> <forme> < input type = valeur "bouton" = "Click Me" OnClick = » Envoyer une demande();"/> </form > </corps > </html >


CheckHeader.aspx

using System;

en utilisant System.Web;

en utilisant System.Web.UI;

public partial class checkHeader: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e) 
{ 
    string value = string.Empty; 
    foreach (string key in Request.Headers) 
     value = Request.Headers[key].ToString(); 
} 

}

Man .. Cet éditeur html suce .. ou je ne sais pas comment utiliser ...

0

L'exception que je faisais face hier a été causée par mon stupide tentative d'écrire sur les en-têtes de la page déjà construite. Lorsque j'ai commencé à créer ma demande en suivant l'un des modèles indiqués ici, je pouvais écrire mes en-têtes.

Maintenant j'utilise l'objet WebRequest, comme dans l'exemple indiqué par @sectrean, here.

Merci beaucoup à tout le monde. Roches StackOverflow :-)