Если ваш скрипт выполняет вывод на своем канале stdout (или притворяется), то вы можете использовать некоторые дополнительные приемы из пакета http Tcl, чтобы хранить данные на уровне ОС, а не перетаскивать их через код напрямую:
package require http 2
set url "http://example.org/getpdf/fromxml"
set data "<example>this might be your xml</example>"
# Generate headers, based on example from PHP readfile() page
puts "Content-Description: File Transfer"
puts "Content-Type: application/pdf"
puts "Content-Disposition: attachment; filename=example.pdf"
puts "Content-Transfer-Encoding: binary"
puts "Expires: 0"
puts "Cache-Control: must-revalidate, post-check=0, pre-check=0"
puts "Pragma: public"
# No content length; data streamed from elsewhere
puts ""; # End of headers!
set tok [http::geturl $url -query $data -type text/xml -channel stdout]
# You ought to check for errors here I suppose...
http::cleanup $tok
Предполагается, что выборка с удаленного хоста является POST, поэтому подходит обработка по умолчанию опции -query
.Так как мы посылаем тело в нашем запросе, это не GET (и это точно не PUT…)