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()
- 确实创建了一个文件,但它不是完整文件,只是文件应包含内容的第一行(或部分)。为什么没有下载整个文件?
- 如何将
urllib.request.urlopen(req)
的值打印为字符串?
注意:我无法使用任何未随 Python 3
默认发行版提供的模块
首先您必须检查响应代码 resp.code
。如果是200,你可以通过调用resp.readall
获取内容,直到EOF和returns bytes
。
resp.getheader('Content-type')
是一些文字,可以用print(str(resp.readall())
显示。如果 Content-type
是非文本,则必须将其存储到文件中。因为内容是bytes
,所以必须以二进制方式存储在文件open
ed中。
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
构建的一个很好的包装器。我发现它更容易使用。
我有一个 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()
- 确实创建了一个文件,但它不是完整文件,只是文件应包含内容的第一行(或部分)。为什么没有下载整个文件?
- 如何将
urllib.request.urlopen(req)
的值打印为字符串?
注意:我无法使用任何未随 Python 3
默认发行版提供的模块首先您必须检查响应代码 resp.code
。如果是200,你可以通过调用resp.readall
获取内容,直到EOF和returns bytes
。
resp.getheader('Content-type')
是一些文字,可以用print(str(resp.readall())
显示。如果 Content-type
是非文本,则必须将其存储到文件中。因为内容是bytes
,所以必须以二进制方式存储在文件open
ed中。
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
构建的一个很好的包装器。我发现它更容易使用。