【问题标题】:python cgi http response adds extra byte to contentpython cgi http响应向内容添加额外字节
【发布时间】:2017-09-25 14:57:20
【问题描述】:

我一直在使用 python cgi 脚本从数据库中获取文件,一切正常,但由于某种原因,文件中似乎添加了一个额外的字节。在数据库中,大小为 10,265 字节,但在 http 响应中,Content-Length 为 10,266,问题似乎出在 http 响应本身。问题是提供的文件是 .jar 并且被 java applcation 使用,然后由于这个额外的字节而无法使用类加载器加载它们。用于从服务器下载的 sn-p 是:

def printFileHeader():
    print 'Content-Type: text/plain;charset=utf-8'
    print

def downloadAddon(addon_id):
    dbConn = sqlite3.connect("addons.db")
    dbCursor = dbConn.cursor()
    dbCursor.execute("SELECT addon_file FROM uploaded WHERE id="+addon_id)
    blobl = dbCursor.fetchone()
    blobl = blobl[0]


    printFileHeader()
    print blobl

然后使用请求的 id 调用 downloadAddon() 函数,但无论我从哪里获取文件(数据库中的 blob 或直接文件),http 响应总是在内容中包含那个额外的字节,即使服务器端文件是好的。欢迎任何帮助。

ps。我知道标头不是正确的文件标头,但出于测试目的,我把它这样放。

【问题讨论】:

    标签: java python apache sqlite http


    【解决方案1】:

    我设法通过在标题中提供文件的内容长度来“解决”问题,因此代码现在看起来像这样:

    def printFileHeader(size):
        print("Content-Disposition: attachment; filename=addon.jar")
        print("Content-Type: application/octet-stream") 
        print("Content-Length: "+str(size))
        print   
    
    def downloadAddon(addon_id):
        dbCursor.execute("SELECT addon_file FROM uploaded WHERE id="+addon_id)
        blobl = dbCursor.fetchone()
        blobl = blobl[0]
        printFileHeader(len(blobl))
        print(blobl) 
    

    这解决了问题,但我仍然不明白为什么,所以仍然欢迎任何解释。此外,在此处检查修复前后的响应时,还有文件的最后 6 个字节:

    之前(带有额外字节)AAAAAK 之后AAAAA=

    感谢任何解释原因

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 2015-11-27
      • 2011-06-09
      • 2015-10-09
      • 2018-07-22
      • 2013-12-22
      相关资源
      最近更新 更多