fthon中的fpassthru?

时间:2010-11-06 09:42:13

标签: php python download urllib

我正在尝试在python中找到用于下载文件的示例代码。确切地说,我正在尝试将php转换为python。

我的php同样的代码:

$http_request = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $host\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
$http_request .= "Content-Length: " . strlen($data) . "\r\n";
$http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
$http_request .= "\r\n";
$http_request .= $data;

$response = '';
if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
die ('Could not open socket');
}

fwrite($fs, $http_request);

$headerpassed = false;
while ($headerpassed == false) {
$line = fgets( $fs);
list($tag, $value) = explode(": ", $line, 2);


if (stristr($tag, 'Location')) {
$target_url = trim($value);
header("Location: http://127.0.0.1/umsp/plugins/".basename(__file__)."?".$url_data_string."\r\ n");
continue;
}


if (trim($line) == "") {
$headerpassed = true;
header('Content-Type: video/avi');
}
header($line);
}


set_time_limit(0);
fpassthru($fs);


fclose($fs);

我发现使用urllib的python文件下载脚本,但我发现的所有示例实际上都保存到物理文件上,而不像上面的php代码。

PS:有人请为我添加'fpassthru'。我无权添加新标签。

1 个答案:

答案 0 :(得分:0)

PHP的fpassthru到Python的翻译可能很简单:

def fpassthru(fp):
    """ Reads to EOF on the given file object from the current position
        and writes the results to output. """
    print fp.read()

fp参数必须是open(打开文件的标准方法)返回的“文件对象”或类似的流工厂方法,如下载urllib2.urlopen来自网址的内容。

例如,这将打开一个URL并打印其内容:

from urllib2 import urlopen # (renamed to urllib.request in Python 3.0)
fp = urlopen('http://www.example.com')
fpassthru(fp)
fp.close()

请注意,您可以使用dict(fp.headers)获取HTTP响应标头。 (但此属性仅适用于urllib2.urlopen返回的文件对象,而不是常规文件对象。)