PythonFlask请求加载pag

2024-04-26 04:33:50 发布

您现在位置:Python中文网/ 问答频道 /正文

创建从我的服务器加载页面的脚本(使用服务器IP等)-一切正常,但如果我想点击我登陆到404错误页面的任何链接,因为链接是这样的:

...37.139.17.81:5000/html/privacy-check.php

我的代码:

from flask import Flask
import requests

application = Flask(__name__)

@application.route("/")
def hello():
        result = requests.get("http://ipinfo.info/index.php")
        return result.content

if __name__ == "__main__":
    application.run(host='0.0.0.0')

下面是一个活生生的例子:

http://37.139.17.81:5000/

如何解析click URL并获取此链接内容?


Tags: nameimportip服务器脚本httpflaskapplication
3条回答

您的“脚本”是一个运行在本地服务器上的flask应用程序。在

当您单击从不同站点加载的页面的链接时,您的flask应用程序会合理地认为它是指向flask应用程序中某个页面的链接,因此尝试在本地应用程序上加载该页面。
flask应用程序在本地服务器上查找链接,可能是因为您加载的页面上的链接是相对链接。在

要解析链接,可以使用urlparse

from urlparse import urlparse
o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
o   
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')

我要问你为什么要把php页面加载到flask应用程序中?在

您基本上是试图让您的页面充当远程页面的代理。为了完全做到这一点,您需要处理远程页面中的所有链接。在

例如,如果有一个类似/something/something的链接,flask将自动尝试将其与本地url(http://yourserver.com/something/something)匹配。考虑到您只定义了一个路由(“/”),应用程序将确定其他页面不存在,并返回404。在

要正确处理此问题,可以尝试以下操作:

import urlparse

@application.route("/")
@application.route("/<url:path>")
def hello(url=None):
    baseurl = "http://ipinfo.info/"
    if not url:
        result = requests.get(urlparse.urljoin(baseurl,"index.php"))
        return result.content
    else:
        result = requests.get(urlparse.urljoin(baseurl,url))
        return result.content

警告:这种方法在各种情况下可能会失效(例如css和js加载),因此您可能需要在页面加载后检查结果。在

对于href="/html/privacy-check.php"你应该这样做

@application.route("/html/privacy-check.php")
def hello():
        result = requests.get("http://ipinfo.info/index.php")
        return result.content

因为它在您的服务器上找不到与/html/privacy-check.php匹配的url,所以抛出404错误。在

相关问题 更多 >