如何用Python从浏览器地址栏获取URL中的参数

0 投票
1 回答
2397 浏览
提问于 2025-04-18 03:33

在使用OAuth 2.0的时候,当我允许我的网页应用通过Google登录访问目录API后,Google会把我重定向回我的网页应用,并在网址后面加上一个授权码。

像这样——>>> http://www.mydomain:8069/?code=4%2FZ6tHz_FoteiCGYMfbADu3_1.AjMpYP1TpHAVXE-sT2ZLcbTj9a4FiwI&db=training_crm#menu_id=108&action=101

现在我需要从这个网址中获取这个代码,以便用它来换取访问令牌。我该如何用Python代码来抓取这个网址中的代码参数呢?

(**正在使用OpenERP)

1 个回答

1

我觉得你想要的是一种从查询字符串中获取数据的方法。如何访问这些数据取决于你的网络服务器是如何和你的Python模块进行交互的。通常,这些数据会存储在一些环境变量中,网络服务器会把它们作为HTTP请求的一部分传递给你的应用。

这个链接来看,OpenERP为你提供了一些帮助类,用于处理网址路由和请求封装。

我建议你使用openerp.http.HttpRequest。


编辑:通过阅读这份文档,似乎OpenERP提供了一个叫做“控制器”的基础类,你可以用它的方法来进行网址路由。(也就是说,根据网址决定展示给客户端什么内容)

如果你的文件夹结构是这样的:

web_example
├── controllers
│   ├── __init__.py
│   └── my_controllers.py
├── __init__.py
└── __openerp__.py

那么你可以在my_controllers.py文件中定义这些方法。这是my_controller.py模块的一个例子(来自上述文档):

class MyController(http.Controller):

    @http.route('/my_url/some_html', type="http")
    def some_html(self):
        return "<h1>This is a test</h1>"

    @http.route('/my_url/some_json', type="json")
    def some_json(self):
        return {"sample_dictionary": "This is a sample JSON dictionary"}

这个类继承自OpenERP.http.Controller类,它提供了你“控制器”的所有基础方法和属性。每个方法都有一个装饰器('@http.route'),它告诉基础类这个方法是用于网址路由的。

这是文档中的内容:

每次你用@http.route()定义一个方法时,它就定义了一个要匹配的网址。例如,some_html()方法会在客户端查询/my_url/some_html网址时被调用。

所以在这个例子中,你的网页应用会把www.mysite.com/my_url/some_html路由到一个显示“这是一个测试”的HTML标题标签的页面。

但是你想要捕获查询字符串(网址中'?'后面的变量)。根据同样的文档,这也可以通过控制器类来完成。在你问题中提供的网址里,查询字符串由'code'和'db'这两个变量及其对应的值组成。通过HTTP在两台机器之间传递数据的方法叫做GET方法。

为了让你的服务器处理这些变量,你可以再次使用控制器类。在每个@http_route方法中,你可以将HTTP参数作为方法的命名参数获取。例如:

class MyController(http.Controller):

    @http.route('/', type="http")
    def some_html(self, code, db):
        return "the code is {0}, the db is {1}".format(code,db)

那么这个方法就能捕获你在问题中给出的网址的参数,并能够对其进行处理。

希望这些信息对你有帮助。

撰写回答