Gibt es eine sendHTTPFile

Für allgemeine Fragen zur Programmierung mit PureBasic.
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Gibt es eine sendHTTPFile

Beitrag von derschutzhund »

Bisonte hat geschrieben:Nur kurz : Die verwirrenden Zeichen, die bei Anmeldung bei einem FTP Server erscheinen ....

Das liegt daran, das FTP Kommandos in ASCII sein müssen. Du wirst dein Programm höchstwahrscheinlich in Unicode kompiliert haben...
Es geht zwar auch, allerdings muss man dann selbst einen ASCII String senden (per SendNetworkData() und nicht per SendNetWorkString())

Wenn Du natürlich beide Programme (also Server UND Client) selbst mit PB erstellst, muss man dann selbst darauf achten, das beide Seiten das
gleiche "Protokoll" benutzen. Nützt nix, wenn der Server nur koreanisch spricht und der Client nur russisch (so mal als krasses Beispiel) ;)
OK, hab ich abgespeichert, wobei die Textübertragung ja mit dem obigen code schon läuft.
Kann mir nun noch jemand sagen wie ich den obigen code (server / client) so erweitern muss um Dateien hin und her zu schieben?????
Das kann doch für euch kein Problem sein!

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Gibt es eine sendHTTPFile

Beitrag von derschutzhund »

Bisonte hat geschrieben:Nur kurz : Die verwirrenden Zeichen, die bei Anmeldung bei einem FTP Server erscheinen ....

Das liegt daran, das FTP Kommandos in ASCII sein müssen. Du wirst dein Programm höchstwahrscheinlich in Unicode kompiliert haben...
Es geht zwar auch, allerdings muss man dann selbst einen ASCII String senden (per SendNetworkData() und nicht per SendNetWorkString())

Wenn Du natürlich beide Programme (also Server UND Client) selbst mit PB erstellst, muss man dann selbst darauf achten, das beide Seiten das
gleiche "Protokoll" benutzen. Nützt nix, wenn der Server nur koreanisch spricht und der Client nur russisch (so mal als krasses Beispiel) ;)
moin moin,

der Tip mit Ascii war richtig gut!
Wenn ich den atomic ohne unicode compiliere dann kann ich mit fillezilla eine Verbindung herstellen!
Das ist der Durchbruch :D :allright:

Jetzt gibt es noch ein Problem mit dem Startverzeichnis.
Irgendwie wird das nicht gefunden.
Wie muss denn die Verzeichnisstruktur sein?
Also nehmen wir mal an ich möchte unter Linux als Startverzeichnis /root/TAUSCH definieren.
Wo muss dann das Programm atomic-server sein oder ist es egal?

EDIT: Die Sache mit dem Verzeichnis hat sich soeben erledigt!

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
Sicro
Beiträge: 969
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Gibt es eine sendHTTPFile

Beitrag von Sicro »

derschutzhund hat geschrieben:auf dem Serverpc befindet sich die Datei upload.php
Datei löschen, brauchst du nicht.

derschutzhund hat geschrieben:Den PB-code habe ich auf meine Parameter angepasst:

Code: Alles auswählen

If InitNetwork() = 0
   MessageRequester("Error", "Can't initialize the network !", 0)
   End
EndIf


Global EOL$
EOL$ = Chr(13)+Chr(10)

; http://localhost:8080/test.php
server$ = "192.168.178.50"
Port = 8000   ; 80

; Alles was nach dem SERVER kommt
url$ = "/"
filename$ = "upload.php"

uploadFile$ = OpenFileRequester("Bla", "", "*.*|*.*", 0);"C:\\loaderSettings.ini"

; Mal noch was besseres einfallen lassen :-\
; Boundary name
RandomSeed(Date())
GUID.l = Random(Date())

Debug GUID

; Content Size + Header + Boundary
Size.l = 0;

Structure ContentData
  Size.i
  *Memory
EndStructure

Structure PostRequest
  Header.s
  Boundary.s
  List Content.ContentData()
EndStructure

Procedure Post_CreateRequeset(URL.s, Host.s, Port.i, Boundary.s)
  Protected *Request.PostRequest = AllocateMemory(SizeOf(PostRequest))
 
  If *Request
    InitializeStructure(*Request,PostRequest)
    *Request\Boundary = Boundary
    *Request\Header = "POST /"+URL+" HTTP/1.1"+EOL$
    *Request\Header + "Host: "+Host+":"+Str(Port)+EOL$
    *Request\Header + "Accept: */*"+EOL$
    *Request\Header + "Content-Type: multipart/form-data; boundary="+Boundary+EOL$
    ProcedureReturn *Request
   
  EndIf
 
  ProcedureReturn #False
EndProcedure

Procedure Post_AddFileContent(*Request.PostRequest, ParameterName.s, FileName.s, *Memory, Length.i, Last.i=#False)
  If *Request
   
    Protected ContentHeader.s = "--" + *Request\Boundary + EOL$
   
    ContentHeader + "Content-Disposition: form-Data; name="+Chr(34)+ParameterName+Chr(34)+"; filename="+Chr(34)+FileName+Chr(34) + EOL$
    ContentHeader + "Content-Type: application/octet-stream"+EOL$+EOL$
   
    Protected ContentEnd.s = ""
   
    ContentEnd = EOL$ + "--" + *Request\Boundary
    If Last
      ContentEnd + "--"
    EndIf
    ContentEnd + EOL$
   
    AddElement(*Request\Content())
   
    *Request\Content()\Size = Len(ContentHeader) + Length + Len(ContentEnd)
    *Request\Content()\Memory = AllocateMemory(*Request\Content()\Size+1) ;0 Character which we do not need..
   
    If *Request\Content()\Memory
   
      PokeS(*Request\Content()\Memory,ContentHeader, Len(ContentHeader),#PB_Ascii)
      CopyMemory(*Memory, *Request\Content()\Memory + Len(ContentHeader), Length)
      PokeS(*Request\Content()\Memory + Len(ContentHeader) + Length, ContentEnd, Len(ContentEnd),#PB_Ascii)
     
      ProcedureReturn #True
     
    EndIf
   
    DeleteElement(*Request\Content())
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure Post_SendRequest(*Request.PostRequest, ConnectionID)
  If *Request
 
    Protected ContentLength.i = 0
   
    ForEach *Request\Content()
      ContentLength + *Request\Content()\Size
    Next
   
    *Request\Header + "Content-Length: "+Str(ContentLength)+EOL$+EOL$
   
    SendNetworkString(ConnectionID, *Request\Header)
   
    ForEach *Request\Content()
      SendNetworkData(ConnectionID, *Request\Content()\Memory,*Request\Content()\Size)
    Next
   
    SendNetworkString(ConnectionID,EOL$)
    ProcedureReturn #True
 
  EndIf

EndProcedure


Procedure Post_Free(*Request.PostRequest)
  If *Request
   
    ForEach *Request\Content()
      FreeMemory(*Request\Content()\Memory)
      DeleteElement(*Request\Content())
    Next   
   
    ClearStructure(*Request, PostRequest)
    FreeMemory(*Request)
 
  EndIf

EndProcedure


*buff = AllocateMemory(FileSize(uploadFile$))
If ReadFile(1, uploadFile$)
   Debug "File Loaded"
   ReadData(1,*buff, MemorySize(*buff))
   CloseFile(1)
EndIf


ConnectionID = OpenNetworkConnection(server$, Port)

If ConnectionID

  Test = Post_CreateRequeset(filename$,server$, Port, "-------------------------------"+Str(GUID))
 
  If Test
 
    If Post_AddFileContent(Test, "datei","test.png",*buff, MemorySize(*buff),#True)
      Post_SendRequest(Test, ConnectionID)
      Debug "File has been sent!"
    EndIf
   
    Post_Free(Test)
  EndIf
 
 
   CloseNetworkConnection(ConnectionID)
Else
   MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf

End

Code: Alles auswählen

; Alles was nach dem SERVER kommt
url$ = "/"
filename$ = "upload.php"
abändern zu:

Code: Alles auswählen

; Alles was nach dem SERVER kommt
url$ = "/"
filename$ = ""

Code: Alles auswählen

If Post_AddFileContent(Test, "datei","test.png",*buff, MemorySize(*buff),#True)
abändern zu:

Code: Alles auswählen

If Post_AddFileContent(Test, "file",GetFilePart(uploadFile$),*buff, MemorySize(*buff),#True)
... und die Sache sollte laufen.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Gibt es eine sendHTTPFile

Beitrag von derschutzhund »

Läuft!

Besten Dank!

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Antworten