Как вернуть JSON из HTTP POST-запроса (в другой домен) - PullRequest
1 голос
/ 25 июня 2009

Я пытаюсь использовать API на веб-сайте, вот часть руководства:

Аутентифицированные сеансы (взято из здесь )

Чтобы создать аутентифицируемый сеанс, вам нужно запросить authToken из ресурса API / auth.

  • URL: http://stage.amee.com/auth (это не мой домен)
  • Метод: POST
  • Формат запроса: application / x-www-form-urlencoded
  • Формат ответа: application / xml, application / json
  • Код ответа: 200 OK
  • Тело ответа: сведения об аутентифицированном пользователе, включая API. версия.
  • Дополнительные данные: файл cookie и заголовок authToken, содержащий маркер аутентификации, который должен быть используется для последующих вызовов.

    Параметры: имя пользователя / пароль

* +1034 * Пример

Запрос

POST / auth HTTP / 1.1
Принять: application / xml
Тип контента: application / x-www-form-urlencoded

username = my_username & password = my_password

Ответ

HTTP / 1.1 200 OK Набор cookie: authToken = 1KVARbypAjxLGViZ0Cg + UskZEHmqVkhx / Pm ...;
authToken: 1KVARbypAjxLGViZ0Cg + UskZEHmqVkhx / PmEvzkPGp ... ==
Content-Type: application / xml; кодировка = UTF-8 * 1 049 *

ВОПРОС:

Как мне заставить это работать?

Я пробовал jQuery, но, похоже, у него проблемы с XSS. Фактический фрагмент кода был бы очень признателен.

приписка

Все, что я искал, было WebClient класс в C #

Ответы [ 2 ]

2 голосов
/ 25 июня 2010

Я использую rails для извлечения того же файла cookie токена аутентификации из stage.amee.com/auth, как упомянуто выше. потребовалось немного экспериментов, прежде чем я создал и настроил правильный объект запроса, который возвратил 200 OK, с аутентификационным токеном как cookie. я не нашел эффективный метод чтения объекта запроса, или я бы опубликовал именно так, как он выглядит. вот мой код ruby ​​из контроллера приложения

#define parameters
uri=URI.parse('http://stage.amee.com')
@path = '/auth'
@login_details = 'username=your_username&password=your_password'
@headers = {'Content-Type' => 'application/x-www-form-urlencoded', 'Accept' => 'application/json'}

#create request object
req = Net::HTTP.new(uri.host, uri.port)

#send the request using post, defining the path, body and headers
resp, data = req.post(@path, @login_details, @headers)

#print response details to console
puts "response code = " << resp.code
puts "response inspect = " << resp.inspect
resp.each do |key, val| 
  puts "response header key : " + key + " = " + val 
end 
puts "data: " + data
2 голосов
/ 25 июня 2009

Вы должны поместить application / json в заголовок Accept , это говорит серверу, что вы хотите, чтобы он отвечал в этом формате - не xml.

...