我的代码中的内部服务器错误?

时间:2017-06-24 15:24:11

标签: python html utf-8 http-status-code-500

#!/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状态错误。我看不出这段代码有什么问题。

我非常感谢您的帮助。

1 个答案:

答案 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会显示所有发生的错误,不确定您当前正在使用的网络服务器(我猜应该有错误日志)。