2017-02-15 8 views
1

Rest API経由でConfluence Cloud v1000.957.0上に新しいページを作成できないようです。私はcURLとPythonの両方を使って無駄にしようとしました。私が返すのは、たびたび空のJSON応答を持つHTTP 200です。資格情報を間違って変更すると、私はHTTP 401になります。Confluence REST API:HTTP 200 w/Empty Response

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/ 

私は匿名のためにcURLの呼び出しのいくつかの詳細を変更しましたが、私は資格情報、祖先のID、スペースキー、およびAPIのURLが正しいかを知っています。また、このアカウントがConfluenceでこのスペースにページを作成するための正しいアクセス権を持っていることを確認し、ConfluenceのAPIアクセスが有効になっています。

    :など、できるだけ多くのパラメータ(空の値を持つすべて)を追加するURL
  • の最後に?os_authType=basicを追加

    1. :私が試してみましたAPI呼び出しで

      バリエーション

    2. status: current
    3. operations: []
    4. metadata: {}
  • Confluenceスペース内の最上位にページを作成するようにAPI呼び出しを変更します(ancestorsフィールドを省略)。
  • このヘッダーを追加:Accept: application/json
  • が呼のbody部分にviewオプションを追加し、続いてURLの末尾にこれを追加する:&expand=body.view。私はそれをPythonコードに追加すると同じ結果が得られるが、それをcURL呼び出しに追加すると、[1] 42999のようなものが出力されることがわかった。新しいコマンドを入力するか、単にReturnを押すと、[1]+ Doneが表示され、次に空白の塊が表示され、続いて作成したcURLの呼び出しが表示されます。
  • AtlassianのJIRA for JIRAソフトウェアには、非常によく似たバグがありましたので、明らかにJIRAでも同様ですが間欠的に発生します。 https://jira.atlassian.com/browse/JRA-41559

    私はHTTPプロトコルにはあま​​り慣れていないので、私は見落としているかもしれないので、実際にはもっと多くのオプションを試してみたいです(ソリューションは理想的ですが)。

    +0

    既存のコンテンツのリストを取得したり、他のAPIリクエストを使用したりしたところで成功しましたか?いいえ、他の言語のYMMVはありません。ブラウザからいくつかのAPIリクエストを呼び出そうとします(URL経由でGET、ブラウザ拡張機能付きのPOST、例えば[YARC](https://chrome.google.com/webstore/detail/yet-another-rest-client/ehafadccdcdedbhcbddihehiodgcddpl) )と認証と要求の問題が異なります。 –

    +0

    私はしませんでしたが、私はcURL呼び出しでユーザー名のドメインを省略することでそれを動作させることができました。 –

    答えて

    2

    問題は、あなたが資格情報(****** ****** COM @ :******。)としてドメインとユーザー名を使用していることであるあなたがチェックすることができ

    これがメインのwikiコンテンツを要求するだけで動作している場合。
    試してみてください: curl -u <user>:<pass> https://<domain>.atlassian.net/wiki/rest/api/content/

    パスワードを入力することもできます。カールはそれを求めます - それはセキュリティの観点から安全です。
    試してみてください。ここで終わる他の誰のために curl -u <user> https://<domain>.atlassian.net/wiki/rest/api/content/

    +0

    この問題には実際に[問題](https://jira.atlassian.com/browse/CONF-41704?src=confmacro)がありますが、Atlassianは解決したと言います。 –

    +0

    @lukegv:違いは、今は '401:unauthorized'を得られていないということです。代わりに、空のreposponse(JSONなし)とHTTPヘッダフィールド 'X-Seraph-LoginReason:OK'を持つ' HTTP 200'を取得します。これは_LoginがOKであると思われます。 – Maciej

    +0

    @maciej これは、ユーザー名からドメインを削除した場合の結果です。私が投稿しようとしているコンテンツには 'b'がありません。なぜなら、それが奇妙なエンコーディングの問題でない限り、私が投稿しようとしているコンテンツから来ているとは思いません。 (数字、文字列、配列、オブジェクト、 'true)期待される文字(' b '(コード98)):予期しない文字(' codeCode ":500、" message ":" org.codehaus.jackson.JsonParseException: ' '、' false ' または' null ')\ n [出典:com.atlas[email protected]1097e3e;行:1、列:2]」} ' –

    0

    ...私はwikiページだったURLにr = requests.get(URL, auth=(USER, PASSWORD)この正確な問題を抱えていた... /ウィキ/休憩/ API /コンテンツ/ 123454でしょう200 r.status_codeとr.textが空である。

    修正するには、requests.session()を使用して2回呼び出します。 1つはセッションを確立するためのもので、もう1つはコンテンツを取得するものです。

    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' 
    

    次に、r.textには内容が含まれます。

    0

    これは私のクレイジーを運転していました。私の解決策は、セッションを作成することによって最終的に発見されました。 cURLを使用してこれを行う方法を正確にはわかりません。 PHPなどを使用する必要があります。私はNodeJSを使用しました

    ここでは、最初にリクエストしたときにXSRFトークンが送信されています。これらを保存するにはセッションが必要です。一旦保管されると、それらはすべての後続の要求とと​​もに発送されなければならない。

    私のアプリケーションはNodeJSで書かれています。

    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'); 
    }); 
    
    関連する問題