文件处理¶
在Pycrl 7.19.0.3及以下, CURLOPT_READDATA
, CURLOPT_WRITEDATA
和 CURLOPT_WRITEHEADER
选项接受文件对象并直接传递基础C库 FILE
指向libcurl的指针。
python 3不再将文件实现为C库 FILE
物体。在pycurl 7.19.3及更高版本中,当在python 3上运行时,这些选项作为对 CURLOPT_READFUNCTION
, CURLOPT_WRITEFUNCTION
和 CURLOPT_HEADERFUNCTION
分别以python文件对象的write方法为参数。因此,任何类似于python文件的对象实现 read
方法可以传递到 CURLOPT_READDATA
以及实现 write
方法可以传递到 CURLOPT_WRITEDATA
或 CURLOPT_WRITEHEADER
选项。
在Python2上运行pycurl 7.19.3及更高版本时,传递的旧行为 FILE
当将一个真正的文件对象赋给 CURLOPT_READDATA
, CURLOPT_WRITEDATA
和 CURLOPT_WRITEHEADER
选项。为了与Python3行为保持一致,这些选项还接受实现 read
或 write
方法(视情况而定)作为参数,在这种情况下,使用python 3代码路径将这些选项转换为 CURLOPT_*FUNCTION
选项调用。
作为参数提供给pycurl的文件 CURLOPT_READDATA
, CURLOPT_WRITEDATA
或 CURLOPT_WRITEHEADER
必须以二进制模式打开以进行读或写。以文本模式打开的文件(无 "b"
旗到 open()
)期望字符串对象,从pycurl读取或写入对象将失败。同样,当通过时 f.write
打开文件的方法 CURLOPT_WRITEFUNCTION
或 CURLOPT_HEADERFUNCTION
或 f.read
到 CURLOPT_READFUNCTION
,文件必须以二进制模式打开。