我正在尝试在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'。我无权添加新标签。答案 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
返回的文件对象,而不是常规文件对象。)