2014-02-22 33 views
0

我正在尝试使用python cgi和webbrowser模块从html表单提交操作中打开url。我能够在本地主机上启动url, python -m webbrowser -t "http://myhost.com/path/to/some/file.html"但是 webbrowser.open(url, new=0, autoraise=True)在我的cgi脚本中,apache提供一个空白页面,并且不会在页面上打印错误。我的Firefox浏览器的位置框显示'http://myhost.com/my_script.cgi?Submit=Submit'而不是目标网址。python webbrowser模块可以使用cgi吗?

如果webbrowser模块不能在这种情况下使用,我很困惑它实际服务的目的。如果我使用url作为表单动作,该页面将被提供给客户端,但是我的脚本需要处理先前html表单传递的变量以确定url,然后将该url提供给客户端。让我知道我在想什么,谢谢。

+0

您是否试图在CGI脚本中运行webbrowser命令来代理数据以传回给用户? – Foon

+0

是的,但我开始用一个静态url来弄清楚如何进行: 'if'Submit'in form: url =“http://www.python.org” try: webbrowser.open (url,new = 0,autoraise = True)' – user2962377

回答

0

我很确定,是的,你正在混淆webbrowser库应该做什么。 如果您在cgi中运行webbrowser命令,它将尝试在运行cgi脚本的服务器上打开webbrowser(无论用户在运行cgi)。这可能不起作用。我认为你想要发生的事情是你的cgi脚本应该向浏览器返回适当的HTTP“命令”以使它重定向。举个例子:

if "Submit" in form: 
    url = "http://www.python.org #or do whatever processing is needed to calculate the new URL 
    print "Status: 302" #this tells the browser the result is a redirect 
    print "Location: " + url #this tells the browser where to redirect 
    print "" #send two new lines to end the HTTP header 

请注意,如果你使用Django或另一个库(和我期望甚至只是CGI库计数),有可能是一个更高层次的方式来做到这一点,但是这应该只是工作在任何地方。你也可以使用META进行内部刷新,例如HTML等内容。

+0

我认为默认的python cgi行为是通过提交按钮传递的参数来加载脚本的路径,所以我看到'http:// path/to/my_script.cgi?URL = Python',位于浏览器的地址栏中,其状态为:302位置:http:// www.python.org'在空白页中。我对localhost上的apache配置知之甚少,但是做到了这一点:'

'此外,一个风格的href工作:'Go to ${place_name}'所以我现在将使用href。谢谢! – user2962377