我正在创建一个程序,将下载一个。jar (java)文件从一个web服务器,通过读取URL指定在同一游戏/应用程序的。jad文件。我使用的是Python 3.2.1

我已经设法从JAD文件中提取JAR文件的URL(每个JAD文件都包含到JAR文件的URL),但是正如您想象的那样,提取的值是type()字符串。

这是相关的函数:

def downloadFile(URL=None):
    import httplib2
    h = httplib2.Http(".cache")
    resp, content = h.request(URL, "GET")
    return content

downloadFile(URL_from_file)

然而,我总是得到一个错误,说在上面的函数的类型必须是字节,而不是字符串。我尝试使用URL.encode('utf-8'),也字节(URL,encoding='utf-8'),但我总是得到相同或类似的错误。

所以基本上我的问题是如何从服务器下载文件时,URL存储在字符串类型?


当前回答

如果你正在使用Linux,你可以通过python shell使用Linux的wget模块。下面是一个示例代码片段

import os
url = 'http://www.example.com/foo.zip'
os.system('wget %s'%url)

其他回答

from urllib import request

def get(url):
    with request.urlopen(url) as r:
        return r.read()


def download(url, file=None):
    if not file:
        file = url.split('/')[-1]
    with open(file, 'wb') as f:
        f.write(get(url))

当我想要与HTTP请求相关的东西时,我使用请求包,因为它的API非常容易开始:

首先,安装请求

$ pip install requests

然后代码:

from requests import get  # to make GET request


def download(url, file_name):
    # open in binary mode
    with open(file_name, "wb") as file:
        # get request
        response = get(url)
        # write to file
        file.write(response.content)

这里我们可以在Python3中使用urllib的Legacy接口:

下面的函数和类是从Python 2模块urllib(而不是urllib2)移植过来的。它们在将来的某个时候可能会被弃用。

示例(2行代码):

import urllib.request

url = 'https://www.python.org/static/img/python-logo.png'
urllib.request.urlretrieve(url, "logo.png")

我希望我正确理解了这个问题,即:当URL存储为字符串类型时,如何从服务器下载文件?

我下载文件并保存在本地使用下面的代码:

import requests

url = 'https://www.python.org/static/img/python-logo.png'
fileName = 'D:\Python\dwnldPythonLogo.png'
req = requests.get(url)
file = open(fileName, 'wb')
for chunk in req.iter_content(100000):
    file.write(chunk)
file.close()

如果你正在使用Linux,你可以通过python shell使用Linux的wget模块。下面是一个示例代码片段

import os
url = 'http://www.example.com/foo.zip'
os.system('wget %s'%url)