2012-04-03 3 views
0

У меня есть серия довольно больших массивов записей, которые я хочу отправить в пользовательские поля удаленного экземпляра Jira, поэтому я пытаюсь сделать это с помощью Curb under Ruby (поскольку их API не позволяет этого, а под SQL это немного опасный маг) Я открыт для других предложений, но я не могу на всю жизнь разобраться, как я могу установить свои файлы cookie с помощью мой первоначальный запрос получит, то предоставить параметры и соответствующие заголовки для постаПроблема с Ruby Curb (Curl) с параметрами настройки и куки-файлами

c = Curl::Easy.new("http://jira/secure/Dashboard.jspa") 
c.verbose = true 
c.http_auth_types = :basic 
c.username = 'user' 
c.password = 'pass' 
c.perform 
c.headers="X-Atlassian-Token: no-check" 
params= {:fieldConfigId=>'13499',:selectedParentOptionId=>'',:addSelectValue=>'true',:os_username=>'user',:os_password=>'pass',:addValue=>'Barry the Badger',:add=>'Add'} 
url="http://jira/secure/admin/EditCustomFieldOptions!add.jspa" 
c.http_post(url,params) 
c.perform 

похоже, он все еще использует тот же URL Я попытался с помощью rest_client, но это, кажется, плохо себя с печеньем, и я действительно нужно et заголовок выше для токена atlassian (поэтому он не запрашивает имя пользователя/пароль) У кого-нибудь есть какие-либо идеи - или предложения о том, какие более эффективные механизмы могут быть для этого - или еще лучше - то, что я сделал неправильно ;) Приветствия Скотт

+0

Jira рекомендует использовать HTTP Basic Auth через SSL. Не могли бы вы попробовать? – joelparkerhenderson

+0

Привет, Джоэл, я немного подтолкнул его - понял, что я сделал неправильно на начальных этапах построения cURL, так как мне нужно вручную аутентифицироваться на странице websudo (это боль, но похоже, что у вас есть только сделать это один раз за сеанс) Похоже, мне нужно переписать мои параметры, поскольку он выглядит так, как selectedParentOptionId должен быть контейнером для двух других переменных - не уверен. Мне нужно потратить немного больше времени. Я думаю, что я почти раскололся – Scott

ответ

1

Сортировано это Перемещенные все вокруг, и было явно установить enable_cookies (который немного орехов)

c = Curl::Easy.new 
#set first url 
c.url = dashboard 
#c.verbose = true 
c.http_auth_types = :basic 
c.username = username 
c.password = password 
c.enable_cookies = true 
c.headers="X-Atlassian-Token: no-check" 
#perform login to first link 
c.perform 
#puts c.cookies 
#prepare url to access websudo 
c.url=websudo 
c.verbose = true 
#set password for websudo form 
params={:webSudoPassword=>password}.to_query 
#set post 
c.http_post(c.url,params) 
#prepare all variables for creating new custom field option 
params={:fieldConfigId=>cf_config:selectedParentOptionId=>'',:addSelectValue=>'true',:os_username=>username,:os_password=>password,:addValue=>cf_value,:add=>'Add'}.to_query 
c.url=addoption 
c.verbose = true 
c.http_post(c.url,params) 

работает удовольствие сейчас, и последовал совету от Pass GET parameters with Ruby Curb и используется ActiveSupport to_query