如何以编程方式与 Apache 通信?

How to programmatically communicate with Apache?

现在有这么多 Web 应用程序 运行 在他们自己的微服务器上,很难在共享主机平台上实现它们。这些应用程序侦听您可以自定义或反向代理的专用端口,但共享主机通常只打开 80 和 443。

举个例子,方便的基于网络的编辑器 ICEcoder is a PHP application, so you just drop the files in a directory and away you go. However, the 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)

您的Python项目一个反向代理,而您要查找的API只是普通的HTTP。 (毕竟,这就是网络浏览器与 Apache 交互的方式......)

要发出 HTTP 请求,您需要像 urllibrequests:

这样的客户端
import requests

response = requests.get("http://" + apache_host + ":8080/" + parsed_path)

默认情况下,您所有的应用程序和微服务器都会认为所有客户端都来自本地主机。如果这是个问题,请查看您的应用是否接受 X-Forwarded-For header。 (如果他们这样做,请将其包含在您的所有请求中。)