Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

HTTP POST/PUT params #3

Closed
abasak opened this Issue · 21 comments
@abasak

Is there any way parameters can be passed in the request body rather than the url for POST/PUT methods? Currently all params are sent via the url, even for POST/PUT.

@mansilladev
Owner

In your use case, is your param list that you're POSTing in the request body live inside of a container? (e.g. JSON, JSON-RPC, etc.)

@mansilladev mansilladev closed this
@mansilladev mansilladev reopened this
@mansilladev
Owner

Damn that "Comment & Close" button. :)

@abasak

The API (is a rails app) I was trying to use requires the following json as the request body -

{
   "post":{
      "title":"foo",
      "body":"bar"
   }
}

I tried to setup the parameters as -

   "parameters":[
      {
         "Name":"post[title]",
         "Required":"Y",
         "Default":"",
         "Type":"string",
         "Description":"Title"
      },
      {
         "Name":"post[body]",
         "Required":"Y",
         "Default":"",
         "Type":"string",
         "Description":"Body"
      }
   ]

and this is what I have noticed in the debug output -

{ httpMethod: 'POST',
  oauth: '',
  methodUri: '/posts.json',
  params: { post: { 'title]': 'foo', 'body]': 'bar' } },
  apiKey: '',
  apiSecret: 'undefined',
  apiName: 'SomeAPI' }
Unsecured Call
{ headers: { 'Content-Length': 0 },
  protocol: 'http',
  host: 'example.com',
  method: 'POST',
  path: '/posts.json?post=' }
  1. It tries to send the params in the url
  2. The format of the param names are not correct. Both title and body ends with a closing square bracket.
@kmayoral

I get a similar issue when I try to access calls using the API tester for POST functions. PHP (well at least my version of 5.3) doesn't populate the global $_POST array with the parameters passed in the URL even though the HTTP method is POST. I have to resort to using $_GET or $_REQUEST arrays to make it work with the API tester. Perhaps if params were sent in the request body as abasak requests, this issue would be fixed as well.

@adrianmott

I'd love to see this as well. I'm trying to setup a PUT method with our API and we require the updated fields to be in a JSON object in the request body (not as parameters in the URL).

Any update on this?

@ezarko

I ran into the same issue, plus some others involving port numbers, https and API keys ... all when not using OAuth. Fixed in ezarko@35b3994. Pull request sent.

@ppalavilli

has this been committed into the master ? looks like not.

@Allblues

Is there a resolution to this issue? Can someone provide an example of how to include a param list in JSON in the request body of a POST?

@martintajur

I've just recently worked on this and thought about sharing the work I did.

I've created a pull request with a patch that would use the HTTP request body instead of GET parameters when the request method is either POST, PUT or DELETE.

The pull request is here: #33

@Allblues
@ccervon

I just started using iodocs and so far I'm loving it. The only issue I have is that I have a few POST methods that require body parameters AND they can be used with a few query parameters as well.
Is there a way to indicate which parameter goes in the body and which one goes in the query url?

@sqmk

Interesting. I may take a look to see if a new option makes sense per parameter.

@eateshkandpal

Can someone confirm if there is any way to put parameters in POST body.
@ccervon : Did you find any solution?

@aikalima

This seems to be working now, tested PUTs only. Example config:

{
                 "MethodName":"Update user",
                 "Synopsis":"Updates user with data supplied in request body",
                 "HTTPMethod":"PUT",
                 "URI":"/users/",
                 "RequiresOAuth":"N",
                 "parameters":[
                     {
                         "Name":"_id",
                         "Required":"Y",
                         "Default":"",
                         "Type":"string",
                         "Description":"user id"
                     },
                     {
                         "Name":"email",
                         "Required":"N",
                         "Default":"",
                         "Type":"string",
                         "Description":"email address"
                     }
                 ]
             }

Sends request BODY as:
{"_id":"51256ef66b1acdb6e5000002","email":"ww@ff.com"}

@ccervon

Adding parameters in POST body works fine.

@Sidwick

@ccervon, Can you proved the Json of a post using body you are confirming?

{
    "MethodName": "addfacebookconnection",
    "Synopsis": "Add a Facebook Connect to the Current Customer Session",
    "HTTPMethod": "POST",
    "URI": "/visitor/addfacebookconnection",
    "RequiresOAuth": "N",
    "parameters": [
        {
            "Name":"Payload",
             "Required":"Y",
             "Default":"",
             "Type":"string",
             "Description":"user id"
        }
    ]
}               

Does not work

@vky

You can check out the fork that I've been working on with @dgc-wh, https://github.com/vkorapaty/iodocs (check the 'example' branch, or can check out the live example here: http://iodocs.vky.me/whitehat). PUT and POST methods can have a request body in addition to query parameters.

I believe Issue #66 is also working on this.

@Sidwick

@vkorapaty, @dgc-wh

beautiful work.

@divyakumbukkal

@vkorapaty
I tried pulling out the latest iodocs from https://github.com/mashery/iodocs but the POST with request body does not seem to be working. I pulled out the latest from your branch too but nothing is working. Could you help?

@alexadkins
Owner

Closed by commit 8ff62fc

@alexadkins alexadkins closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.