如何以编程方式与 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 请求,您需要像 urllib
或 requests
:
这样的客户端
import requests
response = requests.get("http://" + apache_host + ":8080/" + parsed_path)
默认情况下,您所有的应用程序和微服务器都会认为所有客户端都来自本地主机。如果这是个问题,请查看您的应用是否接受 X-Forwarded-For header。 (如果他们这样做,请将其包含在您的所有请求中。)
现在有这么多 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 请求,您需要像 urllib
或 requests
:
import requests
response = requests.get("http://" + apache_host + ":8080/" + parsed_path)
默认情况下,您所有的应用程序和微服务器都会认为所有客户端都来自本地主机。如果这是个问题,请查看您的应用是否接受 X-Forwarded-For header。 (如果他们这样做,请将其包含在您的所有请求中。)