Python烧瓶请求加载页面

时间:2016-05-05 08:50:20

标签: python flask python-requests anonymous

创建从我的服务器加载页面的脚本(使用服务器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/

如何解析点击网址并获取此链接内容?

3 个答案:

答案 0 :(得分:2)

您基本上试图让您的网页充当远程网页的代理。为了完全执行此操作,您需要处理远程页面中的所有链接。

因此,例如,如果有像/something/something这样的链接,flask会自动尝试将其与本地网址(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加载),这种方法可能会中断,因此您可能需要在页面加载后检查结果。

答案 1 :(得分:0)

你的脚本&#34;是在本地服务器 http://37.139.17.81:5000/ 上运行的烧瓶应用程序。

当您点击从不同站点加载的页面的链接时,您的烧瓶应用程序合理地认为它是烧瓶应用程序中页面的链接,因此尝试在本地应用程序上加载页面。 /> 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页面加载到烧瓶应用程序中?

答案 2 :(得分:0)

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的任何网址匹配,因此会抛出404错误。