Как установить значения заголовка и параметров клиента для запроса HTTP GET и прочитать их на сервисном сервере? - PullRequest
0 голосов
/ 20 февраля 2011

Я использую Ruby on Rails 3 и хотел бы установить значения header и params для HTTP-запроса GET сервера client .Затем, с другой стороны, я хотел бы прочитать их на сервере service .

Что я делаю в клиенте :

host = "http://<site_name>.com"
path = "/users/1.json"
query_params = ["username=test_username", "password=test_psw"].join("&")

uri = URI.parse("#{host}#{path}?#{query_params}")

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

http.start do
  @response_test = JSON(http.get("#{host}#{path}").body)["user"]
end

Что я делаю в сервисе :

...
respond_to do |format|
  format.json {
    render :json => @user.to_json
    if ( params["username"] == "test_username" && password == test_psw )
      render :json => @user.to_json
    else
      render :text => "Bad request"
    end
  }
end

Весь приведенный выше код работает неправильно: при выполнении запроса HTTP GET я всегда получаю 706: unexpected token at 'Bad request'.

(1) Как правильно установить header в клиенте ?В приведенном выше примере правильно установлены params?

(2) Как правильно прочитать значения header и params на сервере ?

1 Ответ

2 голосов
/ 20 февраля 2011

Получаете ли вы ошибку «706: неожиданный токен при« неверном запросе »» на стороне клиента после попытки анализа ответа? Если это так, я думаю, это потому, что ваш клиент ожидает ответа JSON, и вы отправляете необработанный необработанный текст «Плохой запрос», который не анализируется как действительный JSON. Попробуйте render :json => "Bad request".to_json

Любые параметры, переданные в строке запроса GET или форме POST, будут в хеше params.

В ответ на ваши вопросы:

1) Вы можете увидеть свои параметры, поместив puts "params: #{params.inspect}" в действие вашего контроллера.

2) Заголовки доступны в хеше request.headers: http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-headers

Вот как установить заголовки в запросе Net :: HTTP:

url = URI.parse("http://www.whatismyip.com/automation/n09230945.asp")

req = Net::HTTP::Get.new(url.path)
req.add_field("X-Forwarded-For", "0.0.0.0")

res = Net::HTTP.new(url.host, url.port).start do |http|
  http.request(req)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...