Ich versuche, Bitbucket-API zu verwenden, um einen neuen Zugriffsschlüssel aus einem Aktualisierungsschlüssel zu generieren. Ich kann dies erfolgreich tun im Terminal:Was ist der Unterschied zwischen Groovys "execute" -Methode und normalen bash-Befehlen?
curl -X POST -u "${client_id}:${secretKey}" https://bitbucket.org/site/oauth2/access_token -d grant_type=refresh_token -d refresh_token=${refreshToken}
Wo $ {...} haben durch ihre Literalwerte ersetzt. Es gibt richtig etwas Ähnliches wie folgt aus:
{"access_token": "xxxxx", "scopes": "pullrequest", "expires_in": 3600, "refresh_token": "xxxxx", "token_type": "bearer"}
Ich Groovy mit diesem auszuführen:
def getAccessToken = "curl -X POST -u \"${client_id}:${secret}\" https://bitbucket.org/site/oauth2/access_token -d grant_type=refresh_token -d refresh_token=${refreshToken}"
def getAccessTokenResult = getAccessToken.execute().text
Wenn ich den Befehl, und führen Sie das Ergebnis println wird es funktionieren, es ist also kein malformed URL Als ich das Ergebnis des Befehls selbst println, kommt es mit dieser zurück:
{"error_description": "Invalid OAuth client credentials", "error": "unauthorized_client"}
Es gibt keinen Grund sollte dies geschehen, es sei denn es einen fundamentalen Unterschied zwischen dem, wie ist die Befehle das ausgeführt wird, wenn jemand kennt den Unterschied oder kann dieses Problem sogar lösen, wäre ich sehr dankbar.
Sie verwenden eine Menge von Shell-Variablen in der 'curl'-Befehl in Groovy. Haben sie Werte, wenn Sie den Groovy-Code ausführen? (Wahrscheinlich müssen Sie sie vor dem Ausführen exportieren. Andernfalls sieht der Befehl "curl", der tatsächlich ausgeführt wird, wahrscheinlich wie folgt aus: "curl -X POST -u": "https://bitbucket.org/site/oauth2/access_token -d grant_type = refresh_token -d refresh_token = '. – chepner
@chepner Beantworten von OP hier - das Parsen des Strings wird ausgeführt, bevor es ausgeführt wird Ein' println' von 'getAccessToken' zeigt den vollen 'curl'-Befehl mit allen korrekt aufgefüllten Werten; Dieser Befehl kann in das Terminal eingefügt und direkt ausgeführt werden (und gibt das Ergebnis an, das wir erwarten). –