我正在创建一个程序,它将通过读取同一游戏/应用程序的 .jad 文件中指定的 URL 从 Web 服务器下载 .jar (java) 文件。我使用的是 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’) 和 bytes(URL,encoding=’utf-8’),但总是得到相同或类似的错误。
所以基本上我的问题是当 URL 以字符串类型存储时如何从服务器下载文件?
在 Python 3.2.1 中,该httplib2库可处理字符串(而非字节)形式的 URL。您遇到的错误可能是由于对 URL 中的 Unicode 字符处理不正确,或者代码的其他部分可能导致问题。
httplib2
要从字符串格式的 URL 下载文件,请按照以下正确使用方法操作httplib2:
httplib2.Http
这是更正后的函数:
import httplib2 def downloadFile(URL=None): if URL is None: raise ValueError("A valid URL must be provided") # Ensure that the URL is a string and properly encoded h = httplib2.Http(".cache") resp, content = h.request(URL, "GET") if resp.status == 200: # Check if the request was successful # Return the content if the download is successful return content else: raise Exception(f"Failed to download file, HTTP status: {resp.status}") # Example usage: URL_from_file = "http://example.com/file.jar" # Replace with your actual URL jar_content = downloadFile(URL_from_file) # Optionally, save the content to a file with open("downloaded_file.jar", "wb") as file: file.write(jar_content)
request()
resp.status
200
open()
"wb"
urllib.parse.quote
如果httplib2仍然出现问题,请考虑使用更现代requests、更用户友好的库:
requests
import requests def downloadFile(URL=None): if URL is None: raise ValueError("A valid URL must be provided") response = requests.get(URL) if response.status_code == 200: return response.content else: raise Exception(f"Failed to download file, HTTP status: {response.status_code}") # Example usage: URL_from_file = "http://example.com/file.jar" # Replace with your actual URL jar_content = downloadFile(URL_from_file) # Optionally, save the content to a file with open("downloaded_file.jar", "wb") as file: file.write(jar_content)
requests对于 Python 中的 HTTP 请求来说功能更强大,并且通常更易于使用。