2010-08-26 3 views
3

J'ai un service REST que j'essaie d'appeler. Il nécessite quelque chose de similaire à la syntaxe suivante:Appel d'un service REST avec Python

http://someServerName:8080/projectName/service/serviceName/ 
     param1Name/param1/param2Name/param2 

Je dois me connecter à l'aide de POST. J'ai essayé de lire sur le sujet en ligne (here et here, par exemple) ... mais voici mon problème:

Si j'essayer d'utiliser le HTTP get méthode de la requête, en construisant mon propre chemin, comme ceci:

BASE_PATH = "http://someServerName:8080/projectName/service/serviceName/" 
urllib.urlopen(BASE_PATH + "param1/" + param1 + "/param2/" + param2) 

il me donne une erreur en disant que GET n'est pas autorisé.

Si j'essayer d'utiliser la méthode de requête HTTP post, comme ceci:

params = { "param1" : param1, "param2" : param2 } 
urllib.urlopen(BASE_PATH, urllib.urlencode(params)) 

il renvoie une erreur 404 avec le message The requested resource() is not available. Et quand je le débugger, il semble être la construction des params dans une requête string ("param1 = quel que soit & param2 = quel que soit" ...)

Comment puis-je utiliser POST mais transmettre les paramètres délimités par des barres obliques comme prévu? Qu'est-ce que je fais mal?

Répondre

5

Je sais que c'est un peu injuste, mais c'est ce qui s'est passé ... Le programmeur en charge du service REST l'a modifié pour utiliser la syntaxe &key=value. +1:

2
  1. Utilisez urllib2
  2. Vous allez devoir être intelligent; quelque chose comme

    params = { "param1" : param1, "param2" : param2 }

    urllib2.urlopen(BASE_PATH + "?" + urllib.urlencode(params), " ")

    pourrait fonctionner.

+0

+1: Vous devez fournir des données pour forcer la demande POST. –

+1

Pourquoi devrais-je utiliser urllib2? Et pourquoi le point d'interrogation? – froadie

0

Quelque chose comme cela pourrait fonctionner:

param1, param2 = urllib.quote_plus(param1), urllib.quote_plus(param2) 
BASE_PATH = "http://someServerName:8080/projectName/service/serviceName/" 
urllib.urlopen(BASE_PATH + "param1/" + param1 + "/param2/" + param2, " ") 

Le second argument de urlopen dit à faire une requête POST, avec des données vides. Le quote_plus vous permet d'échapper des caractères spéciaux sans être forcé dans le schéma &key=value.

+0

Cela ne semble pas fonctionner ... :(Je reçois la même erreur "ressource demandée n'est pas disponible" comme avant – froadie

+0

Êtes-vous sûr de pouvoir accéder à la ressource? Avez-vous besoin de vous authentifier en premier? vous êtes en mesure de nous donner l'url afin que nous puissions tester? – JiminyCricket

Questions connexes