如今许多Web应用程序都在自己的微服务器上运行,在共享主机平台上实现它们可能很困难。应用程序在专用端口上侦听,您可以自定义或反向代理,但共享托管通常只有80和443打开。
就像一个例子,方便的基于Web的编辑器ICEcoder是一个PHP应用程序,所以你只需将文件放在一个目录中就可以了。但是,Cloud9编辑器运行自己的服务器。您可以自定义端口,但同样,您无法运行反向代理。
我曾想过使用PHP或Python CGI脚本作为中介。类似的东西:
www.mydomain / mydirectory中/ middleman.py
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse, json
# hpyothetical apache api
import apache
parsed_path = urlparse.urlparse(self.path)
response = apache(url=parsed_path, port=8080)
sendStuffBack(response)
Apache可以做到这一点吗?我该如何实现它?
修改 以下是基于@ grawity的回答所做的。
helloflask.py
#!/usr/bin/env python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
middle.py
#!/usr/bin/env python
print ("Content-Type: text/html")
print()
import requests
#response = requests.get("http://localhost:5000")
response = requests.get("http://localhost:8888/token=8a387fe88d662e2568f9b8ec2398191452492e7184536670")
print(response.text)
答案 0 :(得分:2)
您的Python项目是反向代理,您正在寻找的API只是普通的HTTP。 (毕竟,这就是Web浏览器与Apache交互的方式......)
要发出HTTP请求,您需要一个像urllib
或requests
import requests
response = requests.get("http://" + apache_host + ":8080/" + parsed_path)
默认情况下,您的所有应用和微服务器都会认为所有客户端都来自localhost。如果这是一个问题,请查看您的应用是否接受X-Forwarded-For标头。 (如果他们这样做,请将其包含在您的所有请求中。)