Python 3 - 使用 urllib 到 运行 .jsp 脚本并检索结果

Python 3 - use urllib to run .jsp script and retrieve results

我有一个 csv 文件,每次我 运行 在 Tomcat 服务器上创建 .jsp 文件时都会创建该文件。手动完成后,我单击 link "servers.jsp" 并开始下载文件 "server_list.csv"。

我想在 Python v3 脚本中执行此操作,以便我可以遍历结果并自动执行该过程。

这是我的代码,用于向服务器发送 POST,在 url 中传递身份验证值并接收生成的 .csv

import urllib.request

link = "https://tomcat.server.org:8443/html/scripts/servers.jsp"
userpass = {'pass': '12345', 'user': 'admin'}

data = urllib.parse.urlencode(userpass)
data = data.encode('utf-8') 
req = urllib.request.Request(link, data)
resp = urllib.request.urlopen(req)
respData = resp.read()

saveFile = open(Myfile.csv,'w')
saveFile.write(str(respData))
saveFile.close()

注意:我无法使用任何未随 Python 3

默认发行版提供的模块

首先您必须检查响应代码 resp.code。如果是200,你可以通过调用resp.readall获取内容,直到EOF和returns bytes

resp.getheader('Content-type')是一些文字,可以用print(str(resp.readall())显示。如果 Content-type 是非文本,则必须将其存储到文件中。因为内容是bytes,所以必须以二进制方式存储在文件opened中。

respData = resp.readall()
with open(Myfile.csv,'wb') as saveFile:
    saveFile.write(respData)

您尝试过 urllib.request.urlretrieve 吗?

https://docs.python.org/3.0/library/urllib.request.html#urllib.request.urlretrieve

注意:如果 URL 指向本地文件,或者存在对象的有效缓存副本,则不会复制该对象

附带说明一下,看看 requests 包,它是围绕 urllib 构建的一个很好的包装器。我发现它更容易使用。

http://docs.python-requests.org/en/latest/