I'm creating a VB.NET program that I'd like to interface with dropbox. I'm starting with the "list_folder" command which will return the contents on a specified path. Here is the URL where you can play with the command:
https://dropbox.github.io/dropbox-api-v2-explorer/#files_list_folder
The HTTP request syntax provided is as follows:
POST /2/files/list_folder
Host: https://api.dropboxapi.com
User-Agent: api-explorer-client
Authorization: Bearer HBNBvdIls8AA12AAFTvyzhNJrdwwpQcswxpRVjmwRIJANPIea7Jc1Ke
Content-Type: application/json
{
"path": "/Backups"
}
What I'm trying to do is the equivalent in a VB.NET command. Here's what i have so far:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim uri As String = "https://api.dropboxapi.com/2/files/list_folder"
Dim request As Net.HttpWebRequest = Net.HttpWebRequest.Create(uri)
request.Method = "POST"
request.UserAgent = "api-explorer-client"
' this is wrong, need to supply an 'authorization token' somehow:
Dim credentials As New Net.NetworkCredential("username", "password")
request.Credentials = credentials
request.ContentType = "application/json"
'request.ContentLength = ???
' how do I set content to the "path: backups" data?
Dim response As Net.HttpWebResponse = request.GetResponse
Debug.Print(response.StatusDescription)
Dim dataStream As IO.Stream = response.GetResponseStream()
Dim reader As New IO.StreamReader(dataStream) ' Open the stream using a StreamReader for easy access.
Dim responseFromServer As String = reader.ReadToEnd() ' Read the content.
MsgBox(responseFromServer) ' Display the content.
' Cleanup the streams and the response.
reader.Close()
dataStream.Close()
response.Close()
End Sub
What I'm missing is somehow encoding the "path": "/Backups" data specified by the doc into the request object. I'm also missing how to encode the "Authorization" access token into the request. (Above I'm using a username/password but that's probably wrong.)
Can anybody complete the VB.NET HTTP request for me? Thanks very much.
** UPDATE new code based on helpful links from the_lotus -- this works, thanks!:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim uri As String = "https://api.dropboxapi.com/2/files/list_folder"
Dim request As Net.HttpWebRequest = Net.HttpWebRequest.Create(uri)
request.Method = "POST"
request.UserAgent = "api-explorer-client"
request.Headers.Add("Authorization", "Bearer HBN-BvdIlsAAAFTyAQzhNJrBNINPIea7Jc1Ke")
'{
'"path": "/Backups"
'}
Dim json_data As String = "{"+ Chr(34) + "path" + Chr(34) + ": " + Chr(34) + "/Backups" + Chr(34) + "}"
request.ContentType = "application/json"
Dim json_bytes() As Byte = System.Text.Encoding.ASCII.GetBytes(json_data)
request.ContentLength = json_bytes.Length
Dim stream As IO.Stream = request.GetRequestStream
stream.Write(json_bytes, 0, json_bytes.Length)
Dim response As Net.HttpWebResponse = request.GetResponse
Debug.Print(response.StatusDescription)
Dim dataStream As IO.Stream = response.GetResponseStream()
Dim reader As New IO.StreamReader(dataStream) ' Open the stream using a StreamReader for easy access.
Dim responseFromServer As String = reader.ReadToEnd() ' Read the content.
MsgBox(responseFromServer) ' Display the content.
' Cleanup the streams and the response.
reader.Close()
dataStream.Close()
response.Close()
End Sub