Опубликовать запрос по коду ruby ​​и JAva для приложения Rails - PullRequest
0 голосов
/ 29 октября 2010

Я пытаюсь вызвать приложение Rails, используя код Ruby.

У меня 2 таблицы.

Blogposts (id, name, slug, desc) Комментарии (идентификатор, данные, идентификатор_узла, тип_узла)

Я пытаюсь опубликовать комментарий через мой код рубина.

URL для меня, как http://localhost:3000/api/blogs/comment.xml?slug=blogtitle-0&comment=aaaaaaaaaaaaaaa

Я не знаю, как написать для этого почтовый индекс Ruby.

Испытан один

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

Пожалуйста, помогите исправить это

Редактировать: То же самое я пытаюсь использовать Java, используя файл библиотеки Джерси.

Здесь также я не получаю результат. Тот, который я пробовал на Java,

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 "+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;
}

где my ConfigurationUtil.POST_COMMENT = "api / blogs / comment.xml";

Вышеприведенное не показывает мне никакой ошибки, ни комментарий не опубликован ..

Пожалуйста, дайте предложения.

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Вот, пожалуйста,

  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)}

Возможно, вам вообще не нужен прокси-сервер. Но на тот случай, если вы хотите, чтобы ваш запрос был проксирован, вы можете использовать это. Отвечающий объект будет иметь ваш ответ.

1 голос
/ 29 октября 2010

С Фарадеем вы просто делаете

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

Использование некоторых внешних гемов может помочь, потому что класс Net :: Http в Ruby не самый простой API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...