如何在Python中正确获取当前的URL地址?

时间:2019-07-03 09:33:28

标签: python request

我在本地主机(http://127.0.0.1:5000/)上运行我的项目,并且在客户端服务器上会有所不同。因此,我尝试尝试动态获取URL地址,但无济于事。

我尝试过:request.host_url,如本thread所示。但是,它返回了

RuntimeError: working outside of request context

在这里,我尝试运行需要完整URL作为参数post()的python unittest,这就是我需要动态URL的原因。

import json, requests

from flask import request
from .base import *

class TestProvince(BaseTest):

    # Test Data
    ID               = '41'
    DESCRIPTION      = 'Province Test'
    LOCAL_DESCRIPTION = 'Province local Description'

    def test_add_record(self):

        print "Adding a new record"

        url = "http://127.0.0.1:5000/Project/API/Province/" # <-- Here I want it to be dynamic url
        payload = {
                    "Status":"AUTH",
                    "Curr":"0",
                    "Inputter":"System",
                    "Createdon":"2019-05-03",
                    "Authorizer":"System",
                    "Authorizeon":"2019-05-03",
                    "Branch":"HO",
                    "ID":self.ID,
                    "Description":self.DESCRIPTION,
                    "LocalDescription":self.LOCAL_DESCRIPTION
                }
        headers = {
            'Content-Type': "application/json",
            'Accept': "application/json"
            }

        response = requests.request("POST", url, data=json.dumps(payload), headers=headers)


if __name__ == "__main__":
    unittest.main()

关于如何在python中正确获取当前URL地址的任何提示?谢谢

3 个答案:

答案 0 :(得分:0)

摘自request文档

request.base_url应该是您应该使用的。我在任何地方都找不到request.host_url的文档。

答案 1 :(得分:0)

请求对象具有.host属性,它将为您提供运行代码的IP和端口。

request.host

要仅获取主机名或IP地址,请尝试:

request.host.split(':')[0]

或者您可以直接查询WSGI环境:

request.environ['SERVER_NAME']

答案 2 :(得分:0)

据我所知,request.host 在 Flask 中的路由功能之外不起作用。 例如,做这样的事情

@app.route('/')
def get_something():
    print(request.host)

这会起作用,因为它在路由函数中。