2013-05-08 2 views
2

Я пытаюсь автоматизировать следующий завиток командной строки в Ruby, Curb:Делая сообщение с Рубином Снаряженным с базовой аутентификацией

curl -H "Content-Type:application/json" -X POST -d \ 
'{"approvalType": "auto", 
    "displayName": "Free API Product", 
    "name": "weather_free", 
    "proxies": [ "weatherapi" ], 
    "environments": [ "test" ]}' \ 
-u myname:mypass https://api.jupiter.apigee.net/v1/o/{org_name}/apiproducts 

Где MyName, mypass и {орг имя} заполнены до запуска скрипта ,

Я не знаю, как сделать сообщение http с полезной нагрузкой JSON, используя базовую аутентификацию с помощью Ruby Curb. Я пробовал следующее:

require 'json' 
require 'curb' 

payload = '{"approvalType": "auto", 
    "displayName": "Test API Product Through Ruby1", 
    "name": "test_ruby1", 
    "proxies": [ "weather" ], 
    "environments": [ "test" ]}' 

uri = 'https://api.jupiter.apigee.net/v1/o/apigee-qe/apiproducts' 
c = Curl::Easy.new(uri) 
c.http_auth_types = :basic 
c.username = 'myusername' 
c.password = 'mypassword' 
c.http_post(uri, payload) do |curl| 
    curl.headers["Content-Type"] = ["application/json"] 
end 

puts c.body_str 
puts c.response_code 

В результате получается пустое тело и код ответа 415. Я проверил, что команда curl работает отлично.

Любая помощь будет принята с благодарностью, потому что она решит целый класс проблем, над которыми я сейчас работаю.

+0

в curl есть команда -vv, чтобы показать подробный вывод, вы можете попробовать то же самое для бордюра? – poseid

ответ

0

Код ответа 415 указывает, что «сервер не поддерживает тип носителя». Работает ли он, если вместо этого вы устанавливаете Content-Type (без скобок)?

curl.headers["Content-Type"] = "application/json" 
+0

К сожалению, это не решило проблему. Я все еще получаю пустое тело и ответ 415 –

3

Я использовал Curb (0.8.5) и выяснил, что, если я повторно локон экземпляра в течение нескольких запросов (получить запрос, чтобы сохранить печенье, а затем отправлять данные) и http_post метод был использован как

http_post(uri, payload) 

было бы на самом деле отправить Ури и полезную нагрузку объединены в один запрос JSon (что, конечно, привело к ошибкам, как «Неожиданный символ („ч“...» или «Bad Request»).

мне удалось получить его работу , но мне пришлось использовать метод с полезной нагрузкой в ​​качестве одного аргумента:

c =Curl::Easy.new 
url = "http://someurl.com" 
headers={} 
headers['Content-Type']='application/json' 
headers['X-Requested-With']='XMLHttpRequest' 
headers['Accept']='application/json' 
payload = "{\"key\":\"value\"}" 

c.url = url 
c.headers=headers 
c.verbose=true 
c.http_post(payload) 

Надеюсь, это поможет.

Смежные вопросы