Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 下载文件代码会更改文件内容并影响解密文件的能力_Python_Encryption_Urllib - Fatal编程技术网

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

Python 下载文件代码会更改文件内容并影响解密文件的能力,python,encryption,urllib,Python,Encryption,Urllib,当我使用Python和urlib2从服务器下载文件时,文件的内容与它们应该的内容略有不同 它们的不同之处在于,在文件的下载版本中添加了额外的行(“\r\n”或“\n”)。对于xml格式的文件来说,这不是一个主要问题,但当我的文件被加密时,这是一个主要问题,因为文件内容略有不同,无法解密 我知道是我的下载代码改变了文件内容,而不是服务器上的文件出错,因为我使用FTP下载了该文件,并在以这种方式下载时发现该文件具有正确的内容。一些更有用的信息:文件是ASCII编码的。我的服务器是Windows.NE

当我使用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>

这里的问题是这一行:

output    = open("tempEncrypted.xml",'w')
Python默认以文本模式打开文件,这意味着您可能会得到换行转换。由于平台差异、通用换行等原因,细节变得复杂

但是如果你有二进制数据,答案很简单:用
'wb'
而不是
'w'
以二进制模式打开它:

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

尝试在二进制模式下使用FTP下载它。这将阻止行结尾的translational让您使用Python 3.x吗?@frb否我使用的是Python 2.7请打印标题(从
response.info()
)。我猜您的服务器配置错误,将“tempEncrypted.xml”视为
text/xml
application/xml
或类似内容,并将其作为
内容类型发送。由于该内容类型明确表示“这是空白不重要的文本”,因此任何一方都可以对换行符执行任何操作。如果这是一个问题,有一些方法可以解决,但正确的解决方案是停止使用与您的内容不匹配的内容类型。此外,您应该在
打开
命令中使用模式
'wb'
,而不是
'w'
。以文本模式打开文件也可以进行换行转换(尤其是在Windows上)。
output    = open("tempEncrypted.xml",'w')
output    = open("tempEncrypted.xml",'wb')