0

REST API を使用してページを作成し始めたばかりです。

基本的な例を構成しようとしていますが、libcurl.net を使用してそれを行うことを考えました。

それがうまくいかない理由は誰にもわかりますか?

アップデート:

curllib.net の「bookpost」の例からこれまでに適応させたものを次に示します。

 Option Explicit On
Imports System.IO
Imports System.Net
Imports SeasideResearch.LibCurlNet

Public Class CurlOperations

Public Shared Sub CurlPost()

    Try

        Dim credUserName As String = "username"
        Dim credPassword As String = "password"

        Dim response As String = Nothing
        Dim outputStdErr As Stream = Nothing

        Curl.GlobalInit(CURLinitFlag.CURL_GLOBAL_ALL)

        Dim easy As Easy
        easy = New Easy

        ' Set up write delegate
        Dim wf As Easy.WriteFunction
        wf = New Easy.WriteFunction(AddressOf OnWriteData)
        easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf)

        'Authentication
        easy.SetOpt(CURLoption.CURLOPT_HTTPAUTH, CURLhttpAuth.CURLAUTH_BASIC)
        easy.SetOpt(CURLoption.CURLOPT_USERPWD, credUserName & ":" & credPassword)

        'disable ssl peer verification
        easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYPEER, False)

        'Header
        easy.SetOpt(CURLoption.CURLOPT_HTTPHEADER, "Content-Type: application/json; charset=utf-8")

        ' Simple post - with a string
        easy.SetOpt(CURLoption.CURLOPT_POSTFIELDS, WikiTools.CommREST.WebToCF.PostCurl())

        ' and the rest of the cURL options
        easy.SetOpt(CURLoption.CURLOPT_USERAGENT, ".NET Framework Client")
        easy.SetOpt(CURLoption.CURLOPT_URL, "https://domain.com/confluence/rest/api/content/")
        easy.SetOpt(CURLoption.CURLOPT_POST, True)

        response = easy.Perform().ToString
        LoggingAndActivites.WriteLog("Response: " & response, GetFunctionName.GetCallerName, True, True)

    Catch ex As Exception

        LoggingAndActivites.WriteLog("Exception: " & ex.ToString, GetFunctionName.GetCallerName, True, True)

    End Try

    Curl.GlobalCleanup()

End Sub

' Called by libcURL.NET when it has data for your program
Public Shared Function OnWriteData(ByVal buf() As Byte, ByVal size As Int32, ByVal nmemb As Int32, ByVal extraData As Object) As Int32

    LoggingAndActivites.WriteLog(System.Text.Encoding.UTF8.GetString(buf), GetFunctionName.GetCallerName, True, True)

    Return size * nmemb

End Function

 End Class

ユーザー名とパスワードを削除すると、次のように「onWriteData」関数を介して応答が返されるため、接続されています。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>401 Unauthorized</title>
</head>
<body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache Server at domain.com Port 7080</address>
</body>
</html>

問題は、正しくログオンしても、「easy.Perform()」関数から「CURLE_OK」以外の応答が得られないことです。

ある程度効いているのは分かっているので良いです。

4

2 に答える 2

1

libcurl.net ドキュメントによると: http://www.libcurl.org/

libcurl は、HTTPS 証明書、HTTP POST、HTTP PUT、FTP アップロード、HTTP フォーム ベースのアップロード、プロキシ、Cookie、およびユーザー + パスワード認証もサポートしています。

したがって、それを使用して REST API 呼び出しを行うことができるはずです。次のようなものを使用して、curl(Linuxバージョン)を使用してページを作成および更新しました。

curl --globoff --insecure --silent -u username:password -X PUT -H 'Content-Type: application/json' --data @body.json confluenceRestAPIURL/pageId

body.json は、ページを更新するためのデータを含むファイルです。

これについてのブログをここに書きました: https://javamemento.blogspot.no/2016/05/jira-confluence-3.html

ここでコードを取得できます: https://github.com/somaiah/jira-confluence-graphs

于 2016-05-22T17:32:06.983 に答える