2012-04-03 11 views
0

Ich habe eine Reihe von ziemlich großen Arrays von Einträgen, die ich in die benutzerdefinierten Felder einer Remote-Jira-Instanz veröffentlichen möchte, also versuche ich es mit Curb unter zu tun Ruby (wie ihre API es nicht erlaubt, und unter SQL ist es ein bisschen wie ein gefährlicher Munge) Ich bin offen für andere Vorschläge, aber ich kann nicht für das Leben von mir herausfinden, wie ich meine Cookies einstellen kann mein erster get Wunsch stellt dann die Parameter und entsprechende Header für den PostenRuby Curb (Curl) Problem mit der Einstellung von Parametern und Cookies

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 

es sieht aus wie es noch ist die gleiche URL mit ich habe versucht rest_client verwenden, aber das scheint mit Cookies werden misbehaving, und ich brauche ich s und die Kopfzeile oben für den Atlassian-Token (so verlangt er keinen Benutzernamen/Passwort) Hat jemand irgendwelche Ideen - oder Vorschläge, welche besseren Mechanismen es dafür geben könnte - oder besser noch - was ich falsch gemacht habe ;) Prost Scott

+0

Jira empfiehlt die Verwendung von HTTP Basic Auth über SSL. Könntest du das versuchen? – joelparkerhenderson

+0

Hi Joel - Ich habe es etwas bugsiert - habe erkannt, was ich in den Anfangsstadien der cURL-Konstruktion falsch gemacht habe - da ich mich manuell gegen die websudo-Seite authentifizieren muss (was ein Schmerz ist - aber es sieht so aus als hättest du nur um es einmal pro Sitzung zu tun) Es sieht so aus, als ob ich meine Parameter neu schreiben muss, da es so aussieht, als ob die selectedParentOptionId ein Container für zwei andere Variablen sein muss - nicht sicher. Ich muss etwas mehr Zeit damit verbringen, herumzuspielen. Ich denke, ich habe es fast schon geknackt – Scott

Antwort

1

Sorted es Verschoben alles um, und explizit festgelegt enable_cookies musste (was ein bisschen verrückt ist)

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) 

Works eine Behandlung jetzt, und folgte dem Rat von Pass GET parameters with Ruby Curb und verwendet ActiveSupport to_query