Python flask 请求加载页面

Python flask requests load page

创建从我的服务器加载页面的脚本(使用服务器 IP 等)- 一切正常,但如果我想点击任何 link 我会进入 404 错误页面,因为 link是 - 像这样的事情:

...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/

如何解析点击 URL 并获取此 link 内容?

您的 "script" 是本地服务器 http://37.139.17.81:5000/ 上的烧瓶应用程序 运行。

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

要解析 link,您可以使用 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 应用程序中?

对于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 错误。

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

因此,例如,如果有一个 link,例如 /something/something,flask 将自动尝试将其与本地 url (http://yourserver.com/something/something) 匹配。鉴于您只定义了一个路由 ("/"),应用程序将确定任何其他页面不存在,并将 return 一个 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 加载),因此您可能需要在页面加载后检查结果。