我是Python中的菜鸟。刚刚安装它,花了2个小时googleing如何获取在URL中发送到Python脚本的简单参数
找到this
非常有帮助,除了我无法在世界上任何事情找出如何替换
import urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['def']
我将如何替换url ='string'以使其正常工作? 我只想访问http://site.com/test/test.py?param=abc并查看abc打印。
Alex回答后的最终代码:
url = os.environ["REQUEST_URI"]
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['param']
答案 0 :(得分:7)
如果您没有任何库可以为您执行此操作,则可以从通过浏览器发送到脚本的HTTP请求构建当前URL。
您感兴趣的标题是Host
以及HTTP方法之后的标题(在您的情况下可能是GET
)。 Here are some more explanations(第一个链接似乎没问题,你可以免费使用谷歌了。)。
This answer向您展示了如何在CGI脚本中获取标题:
如果您作为CGI运行,则无法直接读取HTTP标头, 但是Web服务器将大部分信息放入环境中 变量给你。您可以从
os.environ[]
中选择它。
如果你这样做是为了练习,那就没关系了,因为你将会了解幕后的内容。如果您正在构建任何可重用的东西,我建议您使用库或框架,这样您就不会在每次需要时重新发明轮子。
答案 1 :(得分:0)
这是我在Python 3中从CGI(A)URL,(B)GET参数和(C)POST数据捕获的方式:
================================================ ========
导入sys,os,io
myDomainSelf = os.environ.get('SERVER_NAME')
myPathSelf = os.environ.get('PATH_INFO')
myURLSelf = myDomainSelf + myPathSelf
myQuerySelf = os.environ.get('QUERY_STRING')
myTotalBytesStr =(os.environ.get('HTTP_CONTENT_LENGTH'))
如果(myTotalBytesStr == None):
myJSONStr = '{"error": {"value": true, "message": "No (post) data received"}}'
其他:
myTotalBytes=int(os.environ.get('HTTP_CONTENT_LENGTH'))
myPostDataRaw = io.open(sys.stdin.fileno(),"rb").read(myTotalBytes)
myPostData = myPostDataRaw.decode("utf-8")
mySpy =“ myURLSelf:[” + str(myURLSelf)+“] \ n”
mySpy = mySpy +“ myQuerySelf:[” + str(myQuerySelf)+“] \ n”
mySpy = mySpy +“ myPostData:[” + str(myPostData)+“] \ n”
myFilename =“ spy.txt”
myFilePath = myPath +“ \” + myFilename
myFile = open(myFilePath,“ w”)
myFile.write(mySpy)
myFile.close()
================================================ ========
还有其他一些有用的CGI环境变量:
AUTH_TYPE
CONTENT_LENGTH
CONTENT_TYPE
GATEWAY_INTERFACE
PATH_INFO
PATH_TRANSLATED
QUERY_STRING
REMOTE_ADDR
REMOTE_HOST
REMOTE_IDENT
REMOTE_USER
REQUEST_METHOD
SCRIPT_NAME
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE