Reputation: 83153
I have a REST service that I'm trying to call. It requires something similar to the following syntax:
http://someServerName:8080/projectName/service/serviceName/
param1Name/param1/param2Name/param2
I have to connect to it using POST. I've tried reading up on it online (here and here, for example)... but this is my problem:
If I try using the HTTP get request method, by building my own path, like this:
BASE_PATH = "http://someServerName:8080/projectName/service/serviceName/"
urllib.urlopen(BASE_PATH + "param1/" + param1 + "/param2/" + param2)
it gives me an error saying that GET is not allowed.
If I try using the HTTP post request method, like this:
params = { "param1" : param1, "param2" : param2 }
urllib.urlopen(BASE_PATH, urllib.urlencode(params))
it returns a 404 error along with the message The requested resource () is not available.
And when I debug this, it seems to be building the params into a query string ("param1=whatever¶m2=whatever"...)
How can I use POST but pass the parameters delimited by slashes as it's expected? What am I doing wrong?
Upvotes: 3
Views: 11474
Reputation: 83153
I know this is sort of unfair, but this is what ended up happening... The programmer in charge of the REST service changed it to use the &key=value
syntax.
Upvotes: 5
Reputation: 50554
Something like this might work:
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, " ")
The second argument to urlopen
tells it to do a POST request, with empty data. The quote_plus
allows you to escape special characters without being forced into the &key=value
scheme.
Upvotes: 0
Reputation: 1698
urllib2
You're going to have to be clever; something like
params = { "param1" : param1, "param2" : param2 }
urllib2.urlopen(BASE_PATH + "?" + urllib.urlencode(params), " ")
Might work.
Upvotes: 2