开发者

Post request by ruby code and JAva code for Rails application

开发者 https://www.devze.com 2023-01-22 18:19 出处:网络
i am trying to call my Rails app using Ruby code . I m having 2 tables . Blogposts (id,name,slug,desc)

i am trying to call my Rails app using Ruby code .

I m having 2 tables .

Blogposts (id,name,slug,desc) Comments (id,data,node_id,node_type)

I m trying to post a comment through my ruby code.

The Url for me is like http://localhost:3000/api/blogs/comment.xml?slug=blogtitle-0&comment=aaaaaaaaaaaaaaa

I dont know how to write Ruby post code for this.

The one is tried is

require 'net/http'
require 'uri'

url = URI.parse('http://localhost:3000/api/blogs/comment.xml?slug=blogtitle-0')
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'aruna', 'aruna'
req.set_form_data({'comment[data]'=>'aaaaaaaaaaaaaaa'}, ';')
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
case res
  when Net::HTTPSuccess, Net::HTTPRedirection
    puts res.body
  else
    res.error!
  end
end

Please help in fixing this

Edit: The same thing i am trying using Java using Jersey library file .

Here also i am not getting the result. The one i tried in Java is,

blogBean = objBlogWrapper.postComment(slug,comment);

public BlogBean postComment(String slug, String comment) {
    System.out.println(slug+""+comment);
    // Create a multivalued map to store the parameters to be send in the REST call
    MultivaluedMap<String, String> newBlogParam = new MultivaluedMapImpl();
    // newBlogParam.add("blogpost[slug]", slug);
    // newBlogParam.add("comment[data]", comment);
    newBlogParam.add("slug", slug);
    newBlogParam.add("comment", comment);

    BlogBean blogBean = null;
    try {    
        blogBean = webResource.path(ConfigurationUtil.POST_COMMENT).header(ConfigurationUtil.AUTHENTICATION_HEADER, authentication)
.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_XML_TYPE).post(BlogBean.class, newBlogParam);

    }catch (UniformInterfaceException uie) {
        if (uie.getResponse().getStatus() == 401) {
            System.out.println("Can not authenticate user "+ConfigurationUtil.userName +
                            ". Please check your username/password and try again." );
        } else {
            System.out.println("Error when trying to talk to app. " +
                            "HTTP status code 开发者_Go百科"+uie.getResponse().getStatus()+"returned. Finishing.");

        }
        return null;
    } catch (ClientHandlerException che) {
        System.out.println("Error when trying to talk toapp. Network issues? " +
                        "Please check the following message and try again later: "+che.getMessage());
        return null;
    }
    return blogBean;
}

where my ConfigurationUtil.POST_COMMENT="api/blogs/comment.xml";

The above doesnt show me any error nor the comment is posted ..

Please give suggestions.


Here you go,

  host, phost = ['http://localhost:3000', 'http://proxyhost:2521' ]
  user, password = [ 'user_name' , 'password' ]

  url, p_url = [URI.parse(host), URI.parse(phost)]
  resp = nil

  http = Net::HTTP.new(url.host, url.port, p_url.host, p_url.port)

  req  = Net::HTTP::Post.new(url.path)
  req.basic_auth user, password
  req.set_content_type 'application/xml'

  req.body = 'your_request_body'
  resp = http.start{|h| h.request(req)}

You may not need a proxy host at all. But just in case if you want your request proxied through, you can use that. The resp object will have your response.


With Faraday you just do

body_resp = Faraday.post 'http://localhost:3000/api/blogs/comment.xml', {:slug => 'blogtitle-0', :comment => 'aaaaaaaaaaaaaaa'}.body

Using some external gem can help because Net::Http class in Ruby is not the most simplest API.

0

精彩评论

暂无评论...
验证码 换一张
取 消