HTTPSecureSocket

Ciao a tutti,

devo fare l’upload di un file di testo in un HTTPSecureSocket mi date qualche dritta ?

Grazie !

Il problema l’https o il fare l’upload con un httpsocket?

Fare l’upload.

Ho creato una classe mySocket di tipo HTTPSecureSocket.
Nell’evento .PageReceived ho messo una riga di codice (stupidissima ma solo per prova)

Window1.TextArea1.Text = content

Nella Window1 ho inserito un PushButton e nella action dello stesso ho inserito questo codice:

dim h as new mySocket
dim file as folderitem
dim txtType As New FileType

txtType.Name = “text/txt”
txtType.MacType = “TXT”
txtType.Extensions = “txt;text”

file = GetOpenFolderItem( txtType )

h.Secure = true
h.HTTPProxyAddress = “192.168.1.189”
h.HTTPProxyPort = 8080

h.post(“percorso url”,file)

Grazie
Toni

Prova questa (estende un httpSocket, ma basta che cambi l’oggetto che estende in httpsSockey

[code]Sub postFiles(extends h as HTTPSecureSocket, d as Dictionary)
Dim data(), rawdata, encodedFileName As String
dim rawDataLength as UInt64
Const boundary = “--------ThIsIsABoUnDaRY”

for each Key as String in d.Keys
if d.Value(Key).Type=Variant.TypeObject then
dim o as Object=d.Value(key)
if o isA FolderItem then
dim f as FolderItem=d.Value(Key)
dim bs as BinaryStream
try
bs=BinaryStream.Open(f)
Catch
bs=nil
end try
if bs<>nil then
rawDataLength=bs.Length
rawdata=bs.Read(rawDataLength)
encodedFileName=EncodeURLComponent(f.Name)
data.Append “–”+boundary
data.Append “Content-Disposition: form-data; name=”""+Key+"""; filename=""" + encodedFileName + “”""
data.Append “Content-Type: image/jpeg”
data.Append “Content-Length: " + str(rawDataLength)
data.Append “Content-Transfer-Encoding: binary”
data.Append “”
data.Append rawdata
end if
end if
else
data.Append “–”+boundary
data.Append “Content-Disposition: form-data; name=””"+Key+""""
data.Append “”
data.Append d.Value(Key).StringValue
end if
next
if data.Ubound>-1 then
data.Append “–” + boundary
data.Append “”
h.SetRequestContent join(data,chr(13)+chr(10)), “multipart/form-data, boundary=” + boundary
end if
End Sub
[/code]

Per utilizzarla metti in un dictionary le variabili,se un folder item la aggiunge come file altrimenti come valore testuale

PS verifica se funziona un vecchio codice

Grazie Antonio,

ma averi bisogno di capirci qualcosa in più.
Mi spieghi come costruire il dictionary ?
Che valori devo mettere, devo chiederli al sito in cui faccio il post ?
E’ nel “data” con un append che aggiungo il FolderItem ?

Scusami ma sono proprio a digiuno per quanto riguarda queste cose !

skype: moore_it_at_work

La pagina a cui devi inviare il file cosa si aspetta? Che nomi hanno le variabili?
il dictionary l’equivalente della coppia name, value di una form html
per cui per il nostro caso se ad esempio si aspetta una variabile di nome saluto e una testo (che poi sarebbe il file):
myDim as new dictionary
myDim.value(“saluto”)=“Ciao”
myDim.value(“testo”)=getFolderItem()
//MyHttps l’httpSecure posizionato sulla window
myHttps.postFiles(myDim)
myHttps.post(url) //myHttps.post(url,getFolderItem()

poi con gli eventi vedi quello che succede (nel primo caso l’evento PageReceived, nel secondo l’evento DownloadComplete

In generale se non avessi il file ma solo variabili dovresti utilizzare:
http://documentation.xojo.com/index.php/HTTPSecureSocket.SetFormData

L’esempio con il post (normale) lo trovi su http://documentation.xojo.com/index.php/HTTPSecureSocket e http://documentation.xojo.com/index.php/HTTPSocket.Post

PS ripensandoci la riga con

data.Append d.Value(Key).StringValue

andrebbe sostituita con

data.Append EncodeURLComponent((d.Value(Key).StringValue)

Grazie mille Antonio,

oggi provo e vedo cosa succede.
Ti faccio sapere.

Perfetto ora il problema con UPS.
Il server risponde ma mi da un messaggio di errore che per non sembra riguardare i dati che passo.

Vediamo cosa mi dicono.

Grazie 1000 mi hai illuminato.