我正在使用cgi.FieldStorage()
将URL传递给python脚本:
http://localhost/cgi-bin/test.py?file=http://localhost/test.xml
test.py
只包含
#!/usr/bin/env python
import cgi
print "Access-Control-Allow-Origin: *"
print "Content-Type: text/plain; charset=x-user-defined"
print "Accept-Ranges: bytes"
print
print cgi.FieldStorage()
,结果是
FieldStorage(None, None, [MiniFieldStorage('file', 'http:/localhost/test.xml')])
请注意,该URL仅包含http:/localhost
- 如何传递完整编码的URI,以便该文件是整个URI?我已经尝试编码文件参数(http%3A%2F%2Flocalhost%2ftext.xml
),但这也不起作用
屏幕截图显示网页的输出不是预期的,但编码的网址是正确的
答案 0 :(得分:1)
使用Apache 2.4.10和Firefox(curl),你的CGI脚本也适用于我。您使用的是哪种Web服务器和浏览器?
我的猜测是你正在使用Python CGIHTTPServer
,或基于它的东西。这表明您确定的问题。 CGIHTTPServer
假定它正在提供CGI脚本的路径,因此它会折叠路径,而不考虑可能存在的任何查询字符串。折叠路径会删除重复的正斜杠以及相对路径元素,例如..
。
如果您使用的是此网络服务器,我不会通过更改网址看到任何明显的方法。你不会在生产中使用它,所以也许看看另一个web服务器,如Apache,nginx,lighttpd等。
答案 1 :(得分:-1)
问题在于您的查询参数,您应该对它们进行编码:
>>> from urllib import urlencode
>>> urlencode({'file': 'http://localhost/test.xml', 'other': 'this/has/forward/slashes'})
'other=this%2Fhas%2Fforward%2Fslashes&file=http%3A%2F%2Flocalhost%2Ftest.xml'