【问题标题】:Internal Server Error in my Code?我的代码中有内部服务器错误?
【发布时间】:2017-06-24 15:24:10
【问题描述】:
#!/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 状态错误。我看不出这段代码有什么问题。

非常感谢您的帮助。

【问题讨论】:

  • 第一行应该是 Python 解释器的路径......你的有反引号,在这里也可以输入你的代码......是它在真实文件中所说的吗?跨度>
  • 我不确定我明白了。第一行不是路径吗?因为我被告知要那样做。
  • 一分钟前路径有“在此处插入代码”......现在似乎没问题
  • 哦,好吧:-)。但是你看不到错误吗?我想也许我没有写正确的权限(755),这就是它不起作用的原因。
  • 抱歉,不是 Python 人,所以无法发现问题所在

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


【解决方案1】:

您写的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,这将导致错误,因为该文件名无效。您必须想出一些架构来安全地存储这些文件、对 URL 进行 urlencode 或对 URL 进行哈希处理。您的保存路径也以/ 开头,不确定是否有意,从文件系统根目录开始。

在快速测试中更改错字和最后一点对我有用:

with open("gecrwalt/something.html", "w", endcoding="utf8") as f:
    f.write(str(html))

调试提示:我用这个命令启动了一个本地 Python 网络服务器进程 (from here)

python3 -m http.server --bind localhost --cgi 8000

访问http://localhost:8000/cgi-bin/filename.py 将显示所有发生的错误,不确定您当前使用的网络服务器(我猜某处应该有错误日志)。

【讨论】:

  • chrki 首先:非常感谢。你帮了我很多,我没有看到错误。在我更改了这些错别字和错误之后,我现在得到了状态错误 405。你知道为什么吗? :-)
  • @user8067545 你能像这样执行脚本吗? http://localhost:8000/cgi-bin/filename.py?name=test&url=http%3A%2F%2Fexample.com -- 405 表示“方法不允许”,我在这里猜测:如果你有一个 <form> 某处将 method="POST" 更改为 method="GET"... 可能是一个单独的问题的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2019-03-06
  • 2022-01-11
  • 2015-05-16
  • 2019-09-25
  • 1970-01-01
相关资源
最近更新 更多