pycurl windows

时间:2015-05-19 12:05:48

标签: python windows 32bit-64bit libcurl pycurl

我正在尝试使用pycurl上传大文件(> 2GB)并遇到一个奇怪的问题。当从64位nix机器(PycURL / 7.19.3 libcurl / 7.35.0)上传时,从64位窗口(PycURL / 7.19.5.1 libcurl / 7.37)运行相同的代码时,文件上传没有任何问题。 0)机器上传失败。

我遵循了一些指南,确保fs类型(NTFS)支持大文件,确保服务器端的nginx配置正确,但仍然没有运气。

进一步调试后,我看到从windows机器发送的基础http请求有一个错误的大小属性:

Content-Length: -1320951182

实际文件大小为:2974015488。

如果我在Windows机器上检查python cli,我得到:

>>> type(2974015488)
6: <type 'long'>

如果我在Linux机器上检查python cli,我得到:

>>> type(2974015488)
2: <type 'int'>

我想我需要以某种方式在Windows机器上欺骗pycurl以接受作为int的值,我尝试使用ctypes和摆弄sys.maxint和sys.maxsize的多个变体,但没有工作。

有没有办法告诉python使用64位整数而不是long?

由于

P.S - 我需要使用pycurl,因为所有其他选项都将文件转储到RAM中(是的,甚至是流模式下的请求)

1 个答案:

答案 0 :(得分:0)

我认为你很困惑。

使用libcurl时,应将大于2GB的文件大小作为curl_off_t类型传递给CURLOPT_INFILESIZE_LARGE选项。在所有已知的64位架构(包括win64)上,该类型应为64位。

如果pycurl不这样做,那就错了。如果它 那样做,问题就是其他......