<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
If you know the files you can use curl or your favorite http package to get them <a href="http://tftp.ip:6970/" class="">
http://tftp.ip:6970/</a>.
<div class=""><br class="">
</div>
<div class="">On some versions you can get <a href="http://tftp.ip:6970/filelist.txt" class="">
http://tftp.ip:6970/filelist.txt</a> to get an index of files. I think that file went away in 11.5 or 12.0 with enhancements made to serving static files.</div>
<div class=""><br class="">
<div class="">-Ryan </div>
<div><br class="">
<div class="">On Jun 6, 2018, at 10:18 AM, Charles Goldsmith <<a href="mailto:wokka@justfamily.org" class="">wokka@justfamily.org</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">Thanks very much for this!  Has anyone worked out an easy way to bulk download this data?  Say you have to rebuild or add a node to an existing cluster and the customer doesn't have all of this info archived properly?
<div class=""><br class="">
</div>
</div>
<br class="">
<div class="gmail_quote">
<div dir="ltr" class="">On Mon, Jun 4, 2018 at 1:20 PM Brian Meade <<a href="mailto:bmeade90@vt.edu" class="">bmeade90@vt.edu</a>> wrote:<br class="">
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr" class="">Now on Github- <a href="https://github.com/bmeade90/BulkTFTP" target="_blank" class="">https://github.com/bmeade90/BulkTFTP</a></div>
<div class="gmail_extra"><br class="">
<div class="gmail_quote">On Mon, Jun 4, 2018 at 8:47 AM, Brian Meade <span dir="ltr" class="">
<<a href="mailto:bmeade90@vt.edu" target="_blank" class="">bmeade90@vt.edu</a>></span> wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr" class="">Thanks for cleaning that up Anthony!
<div class=""><br class="">
</div>
<div class="">My main goal with this is to bulk upload entire directories and all the sub-directories so I can easily upload all the Desktops directories and such.</div>
<div class=""><br class="">
</div>
<div class="">Since I'm bulk uploading so many files, I decided to just do a single node at a time but your edit should work fine to make this multi-node.</div>
<div class=""><br class="">
</div>
<div class="">Attached my finalized script I was able to use to upload a few hundred files to a 4-node cluster on Friday.</div>
</div>
<div class="m_4569493297541086517HOEnZb">
<div class="m_4569493297541086517h5">
<div class="gmail_extra"><br class="">
<div class="gmail_quote">On Sat, Jun 2, 2018 at 3:19 PM, Anthony Holloway <span dir="ltr" class="">
<<a href="mailto:avholloway+cisco-voip@gmail.com" target="_blank" class="">avholloway+cisco-voip@gmail.com</a>></span> wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr" class="">Here's your code re-worked a little Brian, for you or for anyone else, and I tested it on 11.5 and it works.  I did not put in any error handling, so I'll leave that up to you.  You can do things like Try/Catch or checking for resp.status_code
 == 200, file existence checking, etc.  I figure, knowing how to make it work was the challenge, not error handling, so I left that out.
<div class=""><br class="">
</div>
<div class="">
<div class=""><font face="monospace" class=""># Install Python 2.7 and choose the option to add to path (off by default)</font></div>
<div class=""><font face="monospace" class=""># Then install two modules</font></div>
<div class=""><font face="monospace" class="">#  C:\>pip install requests</font></div>
<div class=""><font face="monospace" class="">#  C:\>pip install BeautifulSoup</font></div>
<div class=""><font face="monospace" class=""># Then run the program</font></div>
<div class=""><font face="monospace" class="">#  C:\>python tftp.py</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class="">import requests</font></div>
<div class=""><font face="monospace" class="">from BeautifulSoup import BeautifulSoup</font></div>
<div class=""><font face="monospace" class="">requests.packages.urllib3.disable_warnings()</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class="">tftp_host = ""</font></div>
<div class=""><font face="monospace" class="">tftp_user = ""</font></div>
<div class=""><font face="monospace" class="">tftp_pass = ""</font></div>
<div class=""><font face="monospace" class="">tftp_file = ""</font></div>
<div class=""><font face="monospace" class="">tftp_path = ""</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class="">url_base = "https://{}/cmplatform/".format(tftp_host)</font></div>
<div class=""><font face="monospace" class="">url_login = "{}j_security_check".format(url_base)</font></div>
<div class=""><font face="monospace" class="">url_upload = "{}tftpFileUpload.do".format(url_base)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># Allows us to keep track of our login session</font></div>
<div class=""><font face="monospace" class="">print "\nLogging in to {}...".format(tftp_host),</font></div>
<div class=""><font face="monospace" class="">connection = requests.Session()</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># Start a new session by simply access a page on the server</font></div>
<div class=""><font face="monospace" class="">resp = connection.get(url_base, verify = False)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># Our login form data</font></div>
<div class=""><font face="monospace" class="">form_data = {</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"appNav": "cmplatform",</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"j_username": tftp_user,</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"j_password": tftp_pass</font></div>
<div class=""><font face="monospace" class="">}</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># Our login submission to the server</font></div>
<div class=""><font face="monospace" class="">resp = connection.post(url_login, verify = False, data = form_data)</font></div>
<div class=""><font face="monospace" class="">print "Success!\n"</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># We need to grab the token the server gives us, so we can pass it back upon upload</font></div>
<div class=""><font face="monospace" class="">print "Grabbing a new token...",</font></div>
<div class=""><font face="monospace" class="">soup = BeautifulSoup(connection.get(url_upload, verify = False).content)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># It's a hidden input element on the upload form with the name of "token"</font></div>
<div class=""><font face="monospace" class="">token = soup.find("input", {"name": "token"}).get("value")</font></div>
<div class=""><font face="monospace" class="">print "Found! [{}]\n".format(token)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># Our upload form submission data</font></div>
<div class=""><font face="monospace" class="">payload = {</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"<a href="http://struts.token.name/" target="_blank" class="">struts.token.name</a>": (None, "token"),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"token": (None, token),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"file": (tftp_file, open(tftp_file, "rb"), {"Content-Type": "text/plain"}),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"directory": (None, tftp_path)</font></div>
<div class=""><font face="monospace" class="">}</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""># Our upload submission to the server</font></div>
<div class=""><font face="monospace" class="">print "Uploading file: {}...".format(tftp_file),</font></div>
<div class=""><font face="monospace" class="">resp = connection.post(url_upload, verify = False, files = payload)</font></div>
<div class=""><font face="monospace" class="">print "Success!\n"</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class="">print "Done!"</font></div>
</div>
<div class=""><br class="">
</div>
<div class="">If you want multiple server/multiple file support, it's really just a small modification (highlighted in red):</div>
<div class=""><br class="">
</div>
<div class="">
<div class=""><font face="monospace" class=""># Install Python 2.7 and choose the option to add to path (off by default)</font></div>
<div class=""><font face="monospace" class=""># Then install two modules</font></div>
<div class=""><font face="monospace" class="">#  C:\>pip install requests</font></div>
<div class=""><font face="monospace" class="">#  C:\>pip install BeautifulSoup</font></div>
<div class=""><font face="monospace" class=""># Then run the program</font></div>
<div class=""><font face="monospace" class="">#  C:\>python tftp.py</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class="">import requests</font></div>
<div class=""><font face="monospace" class="">from BeautifulSoup import BeautifulSoup</font></div>
<div class=""><font face="monospace" class="">requests.packages.urllib3.disable_warnings()</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" color="#ff0000" class="">tftp_hosts = [</font></div>
<div class=""><font face="monospace" color="#ff0000" class=""><span style="white-space:pre-wrap" class=""></span>"host1",</font></div>
<div class=""><font face="monospace" color="#ff0000" class=""><span style="white-space:pre-wrap" class=""></span>"hostN"</font></div>
<div class=""><font face="monospace" color="#ff0000" class="">]</font></div>
<div class=""><font face="monospace" class="">tftp_user = ""</font></div>
<div class=""><font face="monospace" class="">tftp_pass = ""</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" color="#ff0000" class="">tftp_files = [</font></div>
<div class=""><font face="monospace" color="#ff0000" class=""><span style="white-space:pre-wrap" class=""></span>"file1",</font></div>
<div class=""><font face="monospace" color="#ff0000" class=""><span style="white-space:pre-wrap" class=""></span>"fileN"</font></div>
<div class=""><font face="monospace" color="#ff0000" class="">]</font></div>
<div class=""><font face="monospace" class="">tftp_path = ""</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" color="#ff0000" class="">for tftp_host in tftp_hosts:</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>url_base = "https://{}/cmplatform/".format(tftp_host)</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>url_login = "{}j_security_check".format(url_base)</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>url_upload = "{}tftpFileUpload.do".format(url_base)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># Allows us to keep track of our login session</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>print "\nLogging in to {}...".format(tftp_host),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>connection = requests.Session()</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># Start a new session by simply access a page on the server</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>resp = connection.get(url_base, verify = False)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># Our login form data</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>form_data = {</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"appNav": "cmplatform",</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"j_username": tftp_user,</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"j_password": tftp_pass</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>}</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># Our login submission to the server</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>resp = connection.post(url_login, verify = False, data = form_data)</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>print "Success!\n"</font></div>
<div class=""><span style="white-space:pre-wrap" class=""><font face="monospace" class=""></font></span></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span><font color="#ff0000" class="">for tftp_file in tftp_files:</font></font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># We need to grab the token the server gives us, so we can pass it back upon upload</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>print "Grabbing a new token...",</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>soup = BeautifulSoup(connection.get(url_upload, verify = False).content)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># It's a hidden input element on the upload form with the name of "token"</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>token = soup.find("input", {"name": "token"}).get("value")</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>print "Found! [{}]\n".format(token)</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># Our upload form submission data</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>payload = {</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"<a href="http://struts.token.name/" target="_blank" class="">struts.token.name</a>": (None, "token"),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"token": (None, token),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"file": (tftp_file, open(tftp_file, "rb"), {"Content-Type": "text/plain"}),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>"directory": (None, tftp_path)</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>}</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span># Our upload submission to the server</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>print "Uploading file: {}...".format(tftp_file),</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>resp = connection.post(url_upload, verify = False, files = payload)</font></div>
<div class=""><font face="monospace" class=""><span style="white-space:pre-wrap" class=""></span>print "Success!\n"</font></div>
<div class=""><font face="monospace" class=""><br class="">
</font></div>
<div class=""><font face="monospace" class="">print "Done!"</font></div>
</div>
</div>
<br class="">
<div class="gmail_quote">
<div class="">
<div class="m_4569493297541086517m_-6411392944766899493h5">
<div dir="ltr" class="">On Fri, Jun 1, 2018 at 3:38 PM Brian Meade <<a href="mailto:bmeade90@vt.edu" target="_blank" class="">bmeade90@vt.edu</a>> wrote:<br class="">
</div>
</div>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="">
<div class="m_4569493297541086517m_-6411392944766899493h5">
<div dir="ltr" class="">So just re-read through everything and sure enough I was sending to the wrong IP when running the script.  No wonder it's shown as uploading successfully the entire time.
<div class=""><br class="">
</div>
<div class="">Thanks for you and Stephen's assistance!</div>
<div class=""><br class="">
</div>
<div class="">Tommy, BTW you can remove a lot of the manual set headers if you want to clean yours up.  It seems to work without them.</div>
<div class=""><br class="">
</div>
<div class="">Thanks,</div>
<div class="">Brian Meade</div>
</div>
<div class="gmail_extra"><br class="">
<div class="gmail_quote">On Fri, Jun 1, 2018 at 4:10 PM, Schlotterer, Tommy <span dir="ltr" class="">
<<a href="mailto:tschlotterer@presidio.com" target="_blank" class="">tschlotterer@presidio.com</a>></span> wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-US" link="blue" vlink="purple" class="">
<div class=""><br class="webkit-block-placeholder">
</div>
<div class=""><br class="webkit-block-placeholder">
</div>
<div class=""><br class="webkit-block-placeholder">
</div>
<div class="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class="">Just tested on CUCM 11.5, worked just fine.<u class=""></u><u class=""></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class=""><u class=""></u> <u class=""></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class="">Thanks<u class=""></u><u class=""></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class=""><br class="">
Tommy<u class=""></u><u class=""></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class=""><u class=""></u> <u class=""></u></span></p>
<p class="MsoNormal"><b class=""><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">
<a href="mailto:bmeade90@gmail.com" target="_blank" class="">bmeade90@gmail.com</a> [mailto:<a href="mailto:bmeade90@gmail.com" target="_blank" class="">bmeade90@gmail.com</a>]
<b class="">On Behalf Of </b>Brian Meade<br class="">
<b class="">Sent:</b> Friday, June 1, 2018 4:06 PM<br class="">
<b class="">To:</b> Schlotterer, Tommy <<a href="mailto:tschlotterer@presidio.com" target="_blank" class="">tschlotterer@presidio.com</a>><br class="">
<b class="">Cc:</b> cisco-voip voyp list <<a href="mailto:cisco-voip@puck.nether.net" target="_blank" class="">cisco-voip@puck.nether.net</a>><br class="">
<b class="">Subject:</b> Re: [cisco-voip] CUCM Bulk TFTP File Upload<u class=""></u><u class=""></u></span></p>
<div class="">
<div class="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163h5">
<p class="MsoNormal"><u class=""></u> <u class=""></u></p>
<table class="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="1" cellspacing="4" cellpadding="0" style="background:lightyellow;border:solid black 1.0pt">
<tbody class="">
<tr class="">
<td style="border:none;padding:.75pt .75pt .75pt .75pt" class="">
<p class="MsoNormal"><strong class=""><span style="color:#ff3333" class="">EXTERNAL EMAIL</span></strong><u class=""></u><u class=""></u></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif;display:none" class=""><u class=""></u> <u class=""></u></span></p>
<table class="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="0" cellspacing="4" cellpadding="0">
<tbody class="">
<tr class="">
<td style="padding:.75pt .75pt .75pt .75pt" class="">
<p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</td>
</tr>
</tbody>
</table>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">Thanks Tommy!<u class=""></u><u class=""></u></span></p>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u> <u class=""></u></span></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">Have you tested against CUCM 11.x okay?<u class=""></u><u class=""></u></span></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u> <u class=""></u></span></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">I need to build the dependencies to fully run yours.  I tried pulling out the important upload code but seeing the same issue I'm having with my code.<u class=""></u><u class=""></u></span></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u> <u class=""></u></span></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">Thanks,<u class=""></u><u class=""></u></span></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">Brian Meade<u class=""></u><u class=""></u></span></p>
</div>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u> <u class=""></u></span></p>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">On Fri, Jun 1, 2018 at 1:18 PM, Schlotterer, Tommy <<a href="mailto:tschlotterer@presidio.com" target="_blank" class="">tschlotterer@presidio.com</a>> wrote:<u class=""></u><u class=""></u></span></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in" class="">
<div class="">
<div class="">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class="">Brian,</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class="">Here is my really hacky python script to do this.
</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class="">Thanks</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class=""><br class="">
Tommy</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><b class=""><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> cisco-voip [mailto:<a href="mailto:cisco-voip-bounces@puck.nether.net" target="_blank" class="">cisco-voip-bounces@puck.nether.net</a>]
<b class="">On Behalf Of </b>Brian Meade<br class="">
<b class="">Sent:</b> Friday, June 1, 2018 9:54 AM<br class="">
<b class="">To:</b> cisco-voip voyp list <<a href="mailto:cisco-voip@puck.nether.net" target="_blank" class="">cisco-voip@puck.nether.net</a>><br class="">
<b class="">Subject:</b> [cisco-voip] CUCM Bulk TFTP File Upload</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"> <u class=""></u><u class=""></u></p>
<table class="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="1" cellspacing="4" cellpadding="0" style="background:lightyellow;border:solid black 1.0pt">
<tbody class="">
<tr class="">
<td style="border:none;padding:.75pt .75pt .75pt .75pt" class="">
<p class="MsoNormal"><strong class=""><span style="color:#ff3333" class="">EXTERNAL EMAIL</span></strong><u class=""></u><u class=""></u></p>
</td>
</tr>
</tbody>
</table>
<div class="">
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<table class="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="0" cellspacing="4" cellpadding="0">
<tbody class="">
<tr class="">
<td style="padding:.75pt .75pt .75pt .75pt" class="">
<p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</td>
</tr>
</tbody>
</table>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">Does anyone have a working script for this?</span><u class=""></u><u class=""></u></p>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class="">I put together a script in python to do this but hitting some issues.</span><u class=""></u><u class=""></u></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
</div>
<div class="">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">Right now I’ve got it to the point that it’s trying to upload a single file.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">I used Fiddler to copy what I saw for a working request through a browser.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">I first do a Get to the cmplatform page to get a cookie.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">I then do a Post to the /cmplatform/j_security_check page to authenticate that cookie.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">I then do a Get to /cmplatform/tftpFileUpload.do to get a Struts Token.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">I then do a Post to /cmplatform/tftpFileUpload.do with the Struts token, filename, and directory details.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">This looks to be successful as I get a "File uploaded successfully" message returned but then I can't find the file on the TFTP File Management page.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">I tried using the curl methods I found here (
<a href="https://communities.cisco.com/docs/DOC-43506" target="_blank" class=""><span style="color:#0563c1" class="">https://communities.cisco.com/docs/DOC-43506</span></a> ) but no luck there.  Not sure if this works in 11.5 without grabbing the Struts token. 
  Without a token, I get an error message saying something to the affect of I hit the Submit button twice.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">Here's what it looks like when my script runs in Fiddler:</span><u class=""></u><u class=""></u></p>
<div class="">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><img border="0" width="544" height="450" id="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024m_-299166809608453111_x005f_x0000_i1025" class=""></span><u class=""></u><u class=""></u></p>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">This looks almost exactly like the real example through a browser I captured minus a few headers I tried manually adding with no luck.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif" class="">Python script attached.</span><u class=""></u><u class=""></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""> </span><u class=""></u><u class=""></u></p>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><b class=""><span style="font-size:7.5pt;font-family:"Verdana",sans-serif;color:gray" class=""><br class="">
Tommy Schlotterer | Systems Engineer - Collaboration<br class="">
Presidio (NASDAQ: PSDO) | <a href="http://presidio.com/" title="" target="_blank" class="">
presidio.com</a><br class="">
<a href="https://maps.google.com/?q=20+N+Saint+Clair+3rd+Floor,+Toledo,+OH+43604&entry=gmail&source=g" target="_blank" class="">20 N Saint Clair 3rd Floor, Toledo, OH 43604</a><br class="">
D: <a href="tel:(419)%20214-1415" value="+14192141415" target="_blank" class="">419.214.1415</a> | C:
<a href="tel:(419)%20706-0259" value="+14197060259" target="_blank" class="">419.706.0259</a> |
<a href="mailto:tschlotterer@presidio.com" title="Click to send email to Schlotterer, Tommy" target="_blank" class="">
tschlotterer@presidio.com</a></span></b><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u><u class=""></u></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><b class=""><span style="font-size:7.5pt;font-family:"Verdana",sans-serif;color:gray" class=""><br class="">
<br class="">
<a href="http://www.presidio.com/" target="_blank" class=""><span style="text-decoration:none" class=""><img border="0" width="223" height="49" id="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024m_-299166809608453111IMG1" src="https://www2.presidio.com/signatures/Presidio_Blue_FutureBuilt_200px.png" alt="Future. Built." class=""></span></a></span></b><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u><u class=""></u></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><b class=""><span style="font-size:7.5pt;font-family:"Verdana",sans-serif;color:gray" class=""><br class="">
Follow us:<br class="">
<br class="">
<a href="http://www.twitter.com/presidio" target="_blank" class=""><span style="text-decoration:none" class=""><img border="0" width="22" height="22" id="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024_x0000_i1027" src="http://twitter-badges.s3.amazonaws.com/t_small-a.png" alt="Follow Presidio on Twitter" class=""></span></a></span></b><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u><u class=""></u></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u> <u class=""></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u> <u class=""></u></span></p>
<p class="MsoNormal"><em class=""><span style="font-size:8.5pt" class="">This message w/attachments (message) is intended solely for the use of the intended recipient(s) and may contain information that is privileged, confidential or proprietary. If you are
 not an intended recipient, please notify the sender, and then please delete and destroy all copies and attachments<span style="color:#1f497d" class="">.
</span>Please be advised that any review or dissemination of, or the taking of any action in reliance on, the information contained in or attached to this message is prohibited.</span></em><u class=""></u><u class=""></u></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif" class=""><u class=""></u> <u class=""></u></span></p>
</div>
</div>
</div>
</div>
<div class="">
<div class="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163h5">
<div class=""><br class="webkit-block-placeholder">
</div>
<span style="FONT-SIZE:xx-small;FONT-FAMILY:Verdana;FONT-WEIGHT:bolder;COLOR:#808080" class=""><br class="">
<br class="">
<a href="http://www.presidio.com/" target="_blank" class=""><img id="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024IMG1" border="0" alt="Future. Built." src="https://www2.presidio.com/signatures/Presidio_Blue_FutureBuilt_200px.png" width="223" height="49" class=""></a><br class="">
<br class="">
</span>
<div class=""><br class="webkit-block-placeholder">
</div>
<div class=""><br class="webkit-block-placeholder">
</div>
<span style="FONT-FAMILY:Verdana;COLOR:#808080;FONT-SIZE:xx-small;FONT-WEIGHT:bolder" class=""><br class="">
Follow us:<br class="">
<br class="">
<a href="http://www.twitter.com/presidio" target="_blank" class=""><img id="m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024IMG1" border="0" alt="Follow Presidio on Twitter" src="http://twitter-badges.s3.amazonaws.com/t_small-a.png" width="22" height="22" class=""></a><br class="">
<br class="">
</span>
<div class=""><br class="webkit-block-placeholder">
</div>
<div class=""><br class="webkit-block-placeholder">
</div>
<span style="FONT-FAMILY:Verdana;COLOR:#808080;FONT-SIZE:xx-small;FONT-WEIGHT:bolder" class=""><br class="">
<br class="">
</span>
<div class=""><br class="webkit-block-placeholder">
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
<span class="">_______________________________________________<br class="">
cisco-voip mailing list<br class="">
<a href="mailto:cisco-voip@puck.nether.net" target="_blank" class="">cisco-voip@puck.nether.net</a><br class="">
<a href="https://puck.nether.net/mailman/listinfo/cisco-voip" rel="noreferrer" target="_blank" class="">https://puck.nether.net/mailman/listinfo/cisco-voip</a><br class="">
</span></blockquote>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
_______________________________________________<br class="">
cisco-voip mailing list<br class="">
<a href="mailto:cisco-voip@puck.nether.net" target="_blank" class="">cisco-voip@puck.nether.net</a><br class="">
<a href="https://puck.nether.net/mailman/listinfo/cisco-voip" rel="noreferrer" target="_blank" class="">https://puck.nether.net/mailman/listinfo/cisco-voip</a><br class="">
</blockquote>
</div>
_______________________________________________<br class="">
cisco-voip mailing list<br class="">
<a href="mailto:cisco-voip@puck.nether.net" class="">cisco-voip@puck.nether.net</a><br class="">
https://puck.nether.net/mailman/listinfo/cisco-voip<br class="">
</div>
</div>
<br class="">
</div>
</body>
</html>