下载文件代码会更改文件内容并影响解密文件的能力

时间:2013-01-16 02:06:15

标签: python encryption urllib

当我使用Python和urlib2从我的服务器下载文件时,文件内容与应有的略有不同。

它们的不同之处在于,在文件的下载版本中添加了额外的行(“\ r \ n”或“\ n”)。这对于xml格式的文件来说不是一个主要问题,但是当我的文件被加密时这是一个主要问题,因为文件内容略有不同而且无法解密。

我知道我的下载代码改变了文件内容而不是服务器上的文件错误,因为我已经使用FTP下载了该文件,并且当我以这种方式下载时发现它具有正确的内容。一些更有用的信息:文件是ASCII编码的。我的服务器是Windows .NET,我不确定http响应是ascii还是unicode - 也许这可能导致问题?

如何让urlib2从我的服务器下载我的文件并确保内容不会改变?

原创内容:

     <clientlist>


       <client>
         <clientauthblah>blah</clientauthblah>
         <version9>blah</version9>
         <version10>blah</version10>
         <companyno>1</companyno>
         <companyname>blah</companyname>
       </client>

当我运行下载代码时,这是我得到的内容,这是我无法获得的,因为我的文件已加密,这意味着我无法解密文件:

 <clientlist>




   <client>

     <clientauthblah>blah</clientauthblah>

     <version9>blah</version9>

     <version10>blah</version10>

     <companyno>1</companyno>

     <companyname>blah</companyname>

   </client>

继承我的代码:

# Download
response = urllib2.urlopen("http://www.mywebsite.com/Clients.xml")
output    = open("tempEncrypted.xml",'w')
res       = response.read()
output.write(res)
output.close()

1 个答案:

答案 0 :(得分:1)

这里的问题是这一行:

output    = open("tempEncrypted.xml",'w')

默认情况下,Python以文本模式打开文件,这意味着您可能会获得换行符。平台差异,通用换行等等使细节变得复杂。

但如果您有二进制数据,答案很简单:使用'wb'代替'w'以二进制模式打开它:

output    = open("tempEncrypted.xml",'wb')