Nie mogę utworzyć nowej strony w sprawie Cloud Cloud V1000.957.0 przez reszta API. Próbowałem zarówno za pomocą Curl, jak i Pythona bezskutecznie: wszystko, co wracam, to HTTP 200 z pustą odpowiedzią JSON za każdym razem. Jeśli zmieniam poświadczenia, aby były nieprawidłowe, dostaję HTTP 401.

curl -u ******@******.com:****** -X POST -H 'Content-Type: application/json' -d'{"type":"page","title":"TESTING123", "ancestors":[{"id":123456}], "space":{"key":"AA"},"body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}' https://********.atlassian.net/wiki/rest/api/content/

Zmieniłem kilka szczegółów Curl wezwanie do dobra anonimowości, ale znam poświadczenia, identyfikator przodków, klucz kosmiczny i adres URL API są poprawne. Weryfikowałem również, że to konto ma prawidłowe uprawnienia w konfluencie, aby utworzyć stronę w tej przestrzeni, a dostęp do API dostępu do zbiegu jest włączony.

Odmiany w rozmowie API, które próbowałem:

  1. Dodanie ?os_authType=basic do końca adresu URL

  2. Dodawanie jak największej liczby parametrów (wszystkie z pustymi wartościami), takie jak:

    • status: current
    • operations: []
    • metadata: {}
  3. Zmiana połączenia API Aby utworzyć stronę na górnym poziomie w przestrzeni konfluencji (pomijając pole ancestors).

  4. Dodawanie tego nagłówka: Accept: application/json

  5. Dodawanie opcji view do części body połączenia, a następnie dołączą to na końcu adresu URL: &expand=body.view. Stwierdziłem, że dodanie go do kodu Pythona daje ten sam wynik, ale dodanie go do połączenia Curl wydrukuje coś w rodzaju [1] 42999 (ta ostatnia część zmienia się z każdym połączeniem); Następnie na nowym poleceniu lub po prostu na naciśnięciu Return, wydrukuje [1]+ Done, a następnie kawałek białego znaku, a następnie połączenie Curl właśnie wykonałem.

Znalazłem bardzo podobny błąd w Jirze Jiry na Jira, więc najwyraźniej dzieje się tak dobrze dla Jiry, ale sporadycznie. https://jira.atlassian.com/Browse/jra-41559

Nie jestem strasznie znany z protokołem HTTP, więc może być coś, o czym jestem z widokiem, więc naprawdę chcę tylko więcej opcji, aby spróbować (choć rozwiązanie byłoby oczywiście idealne).

3
Ken K 15 luty 2017, 19:59

2 odpowiedzi

Dla kogokolwiek innego, kto tu kończy ... miałem ten dokładny problem, w którym znajduje się {{x0} a r.text był pusty.

Fix jest używanie żądańs.Session () i wykonaj dwa połączenia. Jeden (zakładam), aby ustalić sesję, a drugi, aby uzyskać treść.

s = requests.session()
s.auth = (USER, PASSWORD)
r = s.get(url_base) # url_base = '.../wiki/rest/api'
r = s.get(url) # url = '.../wiki/rest/api/content/123453'

Następnie r.text będzie miał treść.

1
Patrick 20 kwiecień 2017, 20:14

Doprowadziło też mój szalony. Moje rozwiązanie zostało ostatecznie znalezione przez tworzenie sesji. Nie jestem pewien, jak to zrobić za pomocą Curl. Może użyć PHP lub czegoś takiego. Użyłem Nodejs.

Tutaj dzieje się tokeny XSRF są wysyłane po dokonaniu pierwszej prośby. Potrzebujesz sesji do przechowywania tych. Po zapisaniu muszą być wysyłane ze wszystkimi kolejnymi żądaniami.

Moja aplikacja została napisana w Nodejs. YMMV w innych językach, ale następujące działały dla mnie:

var request = require('request');

/* GET home page. */
router.get('/', function(req, res, next) {
  var cookieJar = request.jar(); // <-- THIS IS THE IMPORTANT PART

  var options = { method: 'GET',
  url: 'https://test.atlassian.net/wiki/rest/api/content',
  jar: cookieJar,
  headers:
   {'cache-control': 'no-cache',
     authorization: 'Basic yourBase64AuthToken' } };

  // You'll need to make two requests, one to get the tokens,
  // and another to actually get your query to work
  request(options, function (error, response, body) {
    if (error) throw new Error(error);
    request(options, function (error, response, body) {
      if (error) throw new Error(error);
      console.log(body);
    });
  });

res.send('hello');
});
0
rickrizzo 23 czerwiec 2017, 19:05