我想在第三方网页上进行身份验证后将用户重定向到下一个网址。在重定向URL中,我希望它包含有关用户的一些信息,即会话ID。例如,当用户返回我的页面时,我的重定向URL将为www.z.appspot.com/?session=x/
我想从新网址中解析他们的一些详细信息,例如www.z.appspot.com/?access_code=x/?token=y&user_id=u
,但在尝试解析信息时,它无法查看URL中的令牌,因为它将其作为会话的一部分。我尝试使用&
,但仍然没有快乐
答案 0 :(得分:1)
您需要一个名为cgi的模块和一个名为FieldStorage的函数。这样做:
import cgi
url_parms = cgi.FieldStorage()
session = url_parms.getvalue("session","default")
您可以为任何网址参数执行此操作。将“default”替换为您想要的默认值(如空字符串)。
答案 1 :(得分:1)
您的问题有点令人困惑,但是您的其他服务无法重定向到www.z.appspot.com/?access_code=x/&token=y&user_id=u
吗?应该正确解析:
import urlparse
import cgi
url = "www.z.appspot.com/?access_code=x/&token=y&user_id=u"
query = urlparse.urlparse(url).query
print cgi.parse_qs(query)
# output: {'access_code': ['x/'], 'token': ['y'], 'user_id': ['u']}
如果您无法更改网址格式,可以执行以下操作:
import urlparse
import cgi
url = "www.z.appspot.com/?access_code=x/?token=y&user_id=u"
query = urlparse.urlparse(url).query
access_code, query = query.split('?', 1)
access_code = access_code.split('=', 1)[1]
print access_code
# output: 'x/'
print cgi.parse_qs(query)
# output: {'token': ['y'], 'user_id': ['u']}
或者,如果您只是想询问如何在URL中嵌入参数,将其重定向到,请参阅Python的urlencode。
<强>更新强>:
import urllib
encoded = urllib.urlencode({'app_id': 11,
'next': 'http://localhost:8086/?access_token=%s' % (access_token,)})
hunch_url = 'http://hunch.com/authorize/v1/?%s' % (encoded,)
然后将hunch_url
传递给您的模板。
答案 2 :(得分:0)
您正在重定向的服务看起来不会正确地在继续URL中组成查询参数。最简单的方法是(正如我在你的原始问题中所建议的那样)将参数作为路径的一部分发送,而不是查询字符串 - 也就是说,使用以下形式的URL:
http://www.yourapp.com/continue/1234
其中1234
是用户的会话ID或用户ID。