#!/usr/bin/python3
import cgi
import cgitb
import urllib.request
import os
import sys
def enco_print(string="", encoding = "utf8"):
sys.stdout.buffer.write(string.encode(encoding) + b"\n")
cgitb.enable()
form = cgi.FieldStorage(endcoding="utf8")
name_name= form.getvalue("name")
url_name = form.getvalue("url")
response = urllib.request.urlopen(str(url_name))
html = response.read().decode("utf8")
if not os.path.exists("gecrwalt"):
os.mkdir("gecrwalt")
with open("/gecrwalt/" + str(url_name) + ".html", "w", endcoding="utf8")
as f:
f.write(str(html))
当我尝试运行此脚本时,我的网站上出现500状态错误。我看不出这段代码有什么问题。
我非常感谢您的帮助。
答案 0 :(得分:0)
有一些拼写错误,你写了endcoding
而不是encoding
。
这里的最后一段
with open("/gecrwalt/" + str(url_name) + ".html", "w", endcoding="utf8")
as f:
f.write(str(html))
已缩减缩进,不确定这是否是由于Stackoverflow上的复制粘贴错误造成的。
这里的另一个问题是(如果我理解你的代码相关)url_name
将包含一个完整的URL,如http://example.com
,这将导致错误,因为该文件名无效。您必须提出一些架构来安全地存储这些文件,urlencode URL或获取URL的哈希值。您的保存路径也以/
开头,不确定是否有意向性,从文件系统根目录开始。
改变输入错误和最后一位对我来说是一个快速测试:
with open("gecrwalt/something.html", "w", endcoding="utf8") as f:
f.write(str(html))
调试提示:我使用此命令启动了本地Python Web服务器进程(from here)
python3 -m http.server --bind localhost --cgi 8000
访问http://localhost:8000/cgi-bin/filename.py
会显示所有发生的错误,不确定您当前正在使用的网络服务器(我猜应该有错误日志)。