Question

Je dois POSTER certains paramètres sur 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 publier mes valeurs-clés dans En-têtes HTTP.

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

Request.Headers.Add(key,value);

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

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

puis redirigez vers la page...mais cela ne fonctionne pas non plus.

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


MODIFIER J'ai oublié de vous dire que mon environnement est .Net 2.0, c#, sur serveur Win 2003.L'exception que j'ai eue est

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

Cela semble être dû à ma tentative de Request.Add, MS a publié il y a un an des correctifs de sécurité qui ne le permettent pas.

Était-ce utile?

La solution

Comme @lassevk l'a dit, une redirection ne fonctionnera pas.

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

Autres conseils

Avez-vous essayé la classe WebClient ?Un exemple pourrait ressembler à :

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

Jetez un œil à HttpWebRequest.Vous devriez pouvoir créer une requête vers l'URL en question en utilisant HttpWebRequest.Method = "POST".

Vous devriez publier plus d'informations.

Par exemple, est-ce du C# ?Cela y ressemble, mais je peux me tromper.

De plus, vous dites que vous obtenez une exception, quel est le type d’exception et le message ?

Dans tous les cas, vous ne pouvez pas rediriger vers une page pour le POST, vous devez la soumettre depuis le navigateur, pas depuis la redirection du serveur, donc si vous souhaitez automatiser cela, je suppose que vous devrez générer une page HTML avec une balise de formulaire, avec des champs de saisie masqués, puis soumettez-la avec javascript.

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

Quel langage/framework ?

En utilisant Python et httplib2, vous devriez pouvoir faire quelque chose comme :

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

Je crois que l'objet Request n'accepterait qu'un certain ensemble d'en-têtes prédéfinis.

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

Mais je ne m'en souviens pas pour le moment...Je vais le chercher dans une seconde...

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

Créez les 2 pages suivantes.Assurez-vous que la page aspx se trouve dans une solution , afin de pouvoir l'exécuter dans le débogueur, définir un 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;

u003C/head>nu003Cbody>nu003Cform>nu003Cinput type="button" value="Click Me" OnClick="SendRequest();" />nu003C/form>nu003C/body>nu003C/html>


CheckHeader.aspx

utiliser le système ;

en utilisant System.Web ;

en utilisant System.Web.UI ;

classe partielle publique CheckHeader :Système.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();
}

}

Homme..Cet éditeur HTML est nul..ou je ne sais pas comment l'utiliser...

L'exception à laquelle j'ai été confronté hier était due à ma stupide tentative d'écrire sur les en-têtes de la page déjà construite.

Lorsque j'ai commencé à créer ma requête en suivant l'une des méthodes indiquées ici, j'ai pu écrire mes en-têtes.

J'utilise maintenant l'objet WebRequest, comme dans l'exemple indiqué par @sectrean, ici.

Merci beaucoup à tout le monde.StackOverflow est génial :-)

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