Sample scripts are provided as-is with no warranty of fitness for a particular purpose. These scripts are solely intended to demonstrate techniques for accomplishing common tasks. Additional script logic and error-handling may need to be added to achieve the desired results in your specific environment.
Note: Make sure you really need to do a POST. If you are simply uploading a file it may be simpler to use the SENDFILE command (which uses the HTTP verb PUT instead of POST).
Note: This process has been simplified as of v3.7. If you are using v3.7 or later, see Sample Script #26.
As of v3.6.0, Robo-FTP supports automating communication via HTTP and HTTPS.
One of the more complicated scenarios to automate is the process of communicating interactively with a web site and uploading data via a web form.
This script provides some functions that greatly simplify this task.
HTTP web forms come in 2 basic varieties:
This is the default type of form. It can be submitted using either an HTTP GET or an HTTP POST.
Submit via GET
This type is less common and is not the focus of this sample. Automating this type of form is very easy. You simply need to construct a url of the form:
This can be accomplished with a simple three-line Robo-FTP script:
FTPLOGON "www.myurl.com" /servertype=HTTP FTPCD "subdir" RCVFILE "script.asp?field1=value1&field2=value2" /as "localfilename.html"
This type of form can only be used for submitting ASCII characters.
Submit via POST
This is the most common type of form submission and is also used to submit ASCII characters in field=value pairs as above. The only difference is instead of appending the form data to the url, the data is added to the body of the POST.
The sample script below includes functions for encoding the data properly and submitting the form.
This type must be explicitly specified in the <form> tag's enctype attribute like this:
<form action="http://www.myurl.com" method="post" enctype="multipart/form-data">
This type of form submits data via POST as described above, but can also include a file upload. This is the only type of form that can cover the entire ISO10646 character set.
Uploading a file via this type of form is defined in RFC 2388.
This sample script includes functions that simplify the process of encoding a file upload into the body of the form and submitting it.
The fields, values, and URL used in the script below are examples and will need to be replaced with whatever fields, values, and URL the system you are trying to submit to requires.
1 BEGINFUNCTIONS 2 FUNCTION InitPostData file boundary 3 SET %myfile = file 4 SET %myboundary = "--" & boundary 5 SET %contenttype = "multipart/form-data; boundary=" & boundary 6 WRITEFILE file %myboundary 7 ENDFUNCTION 8 FUNCTION AddPostField name value 9 SET %header = 'content-disposition: form-data; name="' & name & '"' 10 WRITEFILE %myfile %header /append 11 WRITEFILE %myfile "" /append 12 WRITEFILE %myfile value /append 13 WRITEFILE %myfile %myboundary /append 14 RETURN 15 ENDFUNCTION 16 FUNCTION AddPostFile fieldName file mimeType 17 SETSUBSTR depth = file "\" 18 SETNUM depth = depth + 1 19 SETEXTRACT base = file "\" depth 20 SET %header = 'content-disposition: form-data; name="' & fieldName & '"; filename="' & base & '"' 21 SET %mimeHeader = 'Content-Type: ' & mimeType 22 SET %headFile = %myfile & ".head" 23 SET %tailFile = %myfile & ".tail" 24 WRITEFILE %myfile %header /append 25 WRITEFILE %myfile %mimeHeader /append 26 WRITEFILE %myfile "Content-Transfer-Encoding: binary" /append 27 WRITEFILE %myfile "" /append 28 RENAME %myfile %headFile 29 WRITEFILE %tailFile %myboundary 30 SET %command = "copy /b " & %headFile & " + " & file & " + " & %tailfile & " " & %myfile 31 DOSCMD %command 32 DELETE %headFile 33 DELETE %tailFile 34 ENDFUNCTION 35 ENDFUNCTIONS 36 37 ;; You should not need to edit anything above this line. 38 ;; Just set the variables below as appropriate and call 39 ;; the above functions as demonstrated below. 40 41 SET %tmpdata = "C:\post.bin" 42 SET %field1 = "field1 value" 43 SET %field2 = "field2 value" 44 SET %filename = "C:\files\files.zip" 45 ; mimetype below should be based on extension (zip) 46 SET %mimetype = "application/zip" 47 ; see http://www.mimetype.org/ or use application/octet-stream 48 49 FTPLOGON "HTTP Site" 50 ; prepare post data for upload 51 InitPostData %tmpdata "lakfiqalwuFieldSeperator48pyq489p" 52 AddPostField "field1" %field1 53 AddPostField "field2" %field2 54 AddPostFile "userfile" %filename %mimetype 55 HTTPPOST "/poster.asp" %tmpdata %postresult /outtype=string /contenttype=%contenttype 56 DELETE %tmpdata 57 FTPLOGOFF