2012-10-11 1 views
0

J'essaie de consommer une API Rest à partir de ColdFusion et j'ai rencontré cette erreur. Le code et l'erreur est inférieure àProblème consommant une API de repos à partir de ColdFusion

<cfset theURL = "https://api.dev.net/rest/test/encrypt/124123"> 
<cfhttp url="#theURL#" result="value" method="get" username="XXX" password="XXX"> 
<cfhttpparam type="header" name="Accept" value="application/xml"> 
<cfhttpparam type="header" name="Content-Type" value="application/xml"> 
</cfhttp> 

Erreur: 400 Bad Request. Type de contenu non spécifié

Toute aide à ce sujet serait vraiment appréciée.

+2

Le message d'erreur est explicite: la demande est incorrecte car le type de contenu était attendu mais non reçu. Puisque vous n'avez apparemment pas fourni la véritable URL de l'API, personne ici ne peut faire plus que de deviner ce qui est attendu - comme peut-être vous avez besoin d'un attribut type différent ou de supprimer/remplacer le trait d'union par un espace. La documentation pour quelque service que ce soit sera presque certainement fournir un exemple qui contient cette information ... –

+0

Il semble que votre type de contenu est correctement formé, mais dans l'exemple, vous n'envoyez pas de code XML dans le corps du demande. Cela signifie que vous n'envoyez pas de contenu ou que votre type de contenu est suspect. Comme le dit Peter, il vaut la peine de poster l'URL de l'API ou un lien vers tous les documents que vous avez – barnyr

Répondre

0

<cfhttpparam> peut accepter XML comme le type (type = "XML"), qui définit le contenu de type de la demande de 'text/xml'. l'attribut value dans ce cas doit contenir le corps de la requête xml. alors essayez

<cfhttpparam type="XML" value="#your_XML_string#"> 

et de voir si cela fonctionne.

0

Votre premier problème est que vous définissez la méthode sur "get". Ceci est utilisé pour récupérer un fichier. Si vous utilisez des services resftul, vous "publiez" sur le service. Le prochain problème que vous aurez est que, comme il s'agit d'un service SSL, vous devrez installer le certificat SSL dans votre magasin de clés de confiance. (Google ceci).

Le prochain problème que vous pourriez rencontrer est celui où le service «zippe» la réponse. Si cela arrive google pour la compression cfhttp et vous obtiendrez votre réponse.

+1

Si vous récupérez une ressource, alors vous obtenez. POST est utilisé pour créer une ressource et PUT pour mettre à jour cette ressource. Vous n'aurez pas non plus besoin d'installer un certificat SSL, car le service cible peut utiliser un certificat contresigné par une autorité de confiance (Thawte, Verisign, etc.). Le message d'erreur indique que vous vous connectez probablement bien. Lors de la compression, si le serveur respecte correctement l'en-tête Accept-Encoding, alors vous devriez être ok. Pour tester cela, installez et exécutez Fiddler et utilisez les attributs proxyserver et proxyport sur cfhttp pour surveiller le trafic. – barnyr

+0

Vous avez raison dans les termes http généraux, mais la méthode CFHTTP est la même que l'utilisation d'un formulaire avec la méthode = "post". Les services reposants utilisent la méthode post, à moins que vous n'utilisiez la méthode get et que vous ajoutiez des variables d'URL. En ce qui concerne SSL, le problème est que le serveur CF ne gère pas SSL à moins que le certificat SSL ne soit installé. Vous ne savez pas combien de travail SSL vous avez fait avec le serveur CF. Adobe vous donne des instructions sur la façon d'installer des certificats SSL pour une utilisation avec CF. Je suis sûr que tu le sais mieux. – awjr