如何向Artifactory上传文本文件避免混入HTTP响应头部?
这个问题其实很好定位——你命令里的-i参数就是罪魁祸首!
问题原因
-i(或者--include)是curl的一个参数,作用是让curl在请求完成后,把服务器返回的HTTP响应头输出到标准输出(stdout)。如果你的命令里不小心把stdout重定向到了要上传的本地脚本文件(比如误加了> file.sh),或者在脚本/终端环境中stdout被关联到了该文件,那么这些响应头就会被写入你的本地脚本,最后上传到Artifactory的自然就是被污染后的文件了。
哪怕没有显式重定向,-i的输出也可能在某些复杂环境下意外干扰到文件内容,所以上传文件时这个参数完全没必要。
解决方案
1. 直接移除-i参数
这是最直接有效的方法,上传文件时不需要curl输出响应头。修改后的命令如下:
curl -u username:password -T file.sh "http://my.server/directory"
注意:把
username:password替换成你真实的Artifactory账号信息,不需要保留尖括号。
2. 如需调试,用-v替代-i
如果你需要查看上传的请求/响应细节来调试,别用-i,改用-v(verbose模式)。-v会把所有调试信息输出到标准错误(stderr),不会干扰标准输出,也就不会污染你的本地脚本文件:
curl -v -u username:password -T file.sh "http://my.server/directory"
这样你可以在终端看到完整的响应头和请求过程,但上传到Artifactory的依然是你本地的原始脚本内容。
3. 恢复被污染的本地文件
如果你的本地脚本已经被响应头污染了,记得先恢复原始版本(比如从备份获取,或者重新生成),再执行上传命令,避免再次上传错误的文件。
验证方法
上传前可以用cat file.sh查看本地脚本内容,确认没有混入HTTP响应头;上传后也可以在Artifactory的web界面里查看文件内容,确保和本地一致。
内容的提问来源于stack exchange,提问作者Jason Templeman

