HTTP Request 
ネットワーク上のファイルをドキュメントとして開く場合は loadComponentFromURL メソッドで開くことができます。また、画像ファイルなどをダウンロード、入手する場合には css.ucb.SimpleFileAccess サービスが利用できます。
一方で POST メソッドでファイルを受け取る場合には上記の方法が利用できません。この場合には css.ucb.UniversalContentBroker サービスを利用します。
http や https プロトコルの場合には css.ucb.WebDAVContentProvider サービスが利用されます。
少し複雑ですが、次のようにして https プロトコルのアドレスに POST メソッドで要求、ファイルを入力として受け取ることができます。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| | Sub HttpRequest_post
sURL = "https://chart.googleapis.com/chart"
sBody = "cht=qr&chs=100x100&chl=QR"
oInput = Post(sURL, sBody)
msgbox oInput.available()
End Sub
Function Post(sURL As String, sBody As String) As Variant
oUCB = CreateUnoService("com.sun.star.ucb.UniversalContentBroker")
oId = oUCB.createContentIdentifier(sURL)
oContent = oUCB.queryContent(oId)
oDataSink = CreateUnoListener("XDataSink_", _
"com.sun.star.io.XActiveDataSink")
oCommandEnv = CreateUnoListener("XCommandEnv_", _
"com.sun.star.ucb.XCommandEnvironment")
oBodyStream = CreateUnoService("com.sun.star.io.Pipe")
oTextOutput = CreateUnoService("com.sun.star.io.TextOutputStream")
oTextOutput.setOutputStream(oBodyStream)
oTextOutput.writeString(sBody)
oTextOUtput.closeOutput()
oPostArgs = CreateUnoStruct("com.sun.star.ucb.PostCommandArgument2")
oPostArgs.Source = oBodyStream
oPostArgs.Sink = oDataSink
aCommand = CreateUnoStruct("com.sun.star.ucb.Command")
aCommand.Name = "post"
aCommand.Argument = oPostArgs
oRet = oContent.execute(aCommand, -1, oCommandEnv)
oInput = oDataSink.getInputStream()
Post = oInput
End Function
Dim oStream As Variant
Function XDataSink_setInputStream(oLocStream As Variant)
oStream = oLocStream
End Function
Function XDataSink_getInputStream() As Variant
XDataSink_getInputStream = oStream
End Function
Function XCommandEnv_getInteractionHandler() XCommandEnv_getInteractionHandler = CreateUnoListener(_
"XInteractionHandle_", "com.sun.star.task.XInteractionHandler")
End Function
Function XCommandEnv_getProgressHandler() XCommandEnv_getProgressHandler = CreateUnoListener(_
"XProgressHandle_", "com.sun.star.ucb.XProgressHandler")
End Function
Function XInteractionHandle_handle(oRequest)
End Function
Function XProgressHandle_push(nStatus)
End Function
Function XProgressHandle_update(nStatus)
End Function
Function XProgressHandle_pop()
End Function
|
InteractionHandler 
css.task.XInteractionHandler インターフェースを使用してユーザーによる動作を行わせることができます。例えば、ダイアログの OK ボタンを押すといったような、ユーザーによる認証や操作をすべき場所で使われています。
HTTPのリクエストで認証が必要な場所でも利用されており、ユーザー名とパスワードを入力するダイアログの表示などで利用されます。
次のハンドラは URL へアクセスした際の認証を取り扱います。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| | Sub InteractionHandler_handle(req)
r = req.getRequest()
If CheckExceptionType(r, "com.sun.star.ucb.URLAuthenticationRequest") Then
conts = req.getContinuations()
for i = 0 to ubound(conts) step 1
cont = conts(i)
If HasUnoInterfaces(cont, "com.sun.star.ucb.XInteractionSupplyAuthentication2") Then
cont.setUserName("foo")
cont.setPassword("bar")
cont.select()
Exit For
End If
next
End If
End Sub
Function CheckExceptionType(e, sType As String) As Boolean
ret = False
idlclass = CreateUnoService("com.sun.star.reflection.CoreReflection").getType(e)
If not IsNull(idlclass) Then
ret = (idlclass.getTypeClass() = com.sun.star.uno.TypeClass.EXCEPTION and _
idlclass.getName() = sType)
End If
CheckExceptionType = ret
End Function
|