views:

59

answers:

1

Hi All,

I need to post some xml to a webservice and I'm trying to use HTTParty. Can someone provide an example as to how I go about doing so?

Here is the format of the XML I need to post:

<Candidate xmlns="com.mysite/2010/10/10" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"&gt;
<FirstName></FirstName>
<LastName></LastName>
<Email></Email>
<Gender></Gender>
</Candidate>

Here is my class so far:

require 'httparty'


class Webservice
  include HTTParty
  format :xml
  base_uri 'mysite.com'
  default_params :authorization => 'xxxxxxx'

  def self.add_candidate(first_name,last_name,email,gender)
    post('/test.xml', :body => "")    
  end  
end

I'm not quite sure how to flesh out add_candidate.

Any help would be appreciated.

Thanks.

A: 

You've got two options. HTTParty allows you to post both a string or a hash.

The string version would be:

post('/test.xml', :body => "<Candidate xmlns=\"com.mysite/2010/10/10\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"&gt;&lt;FirstName&gt;#{first_name}&lt;/FirstName&gt;&lt;LastName&gt;#{last_name}&lt;/LastName&gt;&lt;Email&gt;#{email}&lt;/Email&gt;&lt;Gender&gt;#{gender}&lt;/Gender&gt;&lt;/Candidate&gt;")

Functional, but not pretty. I'd do this instead:

post('/test.xml', :body => {
  :Candidate => {
    :FirstName => first_name,
    :LastName  => last_name,
    :Email     => email,
    :Gender    => gender,
  }
}

Now, I can't say for sure whether the namespaces are required by the endpoint, and if so, whether the hash version will work. If that's the case, you may have to go with doing the body as a string.

vonconrad
Thanks. Just what I needed!
Mike G
No worries. If my solution solved the problem, please "accept" the answer by clicking the check mark to the left of my answer. You'll have an easier time getting answers to other questions that way.
vonconrad