Ciao a tutti,
devo fare l’upload di un file di testo in un HTTPSecureSocket mi date qualche dritta ?
Grazie !
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.