使用Python + Nginx + uWSGI打印HTTP请求的URL参数

printing URL parameters of a HTTP request using Python + Nginx + uWSGI

我使用了这个链接,并成功地使用uwsgi运行了一个python脚本。尽管我只是一行一行地跟着医生。

我有一个GPS设备正在向远程服务器发送数据。同一个设备的文档说它使用TCP连接到服务器,因此这将是HTTP,因为像GPS设备一样简单的设备将无法进行HTTPS(我希望我就在这里),因为我已经配置了我的Nginx服务器,将所有传入的HTTP请求转发到python脚本,以便通过uwsgi进行处理。

我要做的是简单地在HTML页面上打印URL或查询字符串。因为我在设备端没有控制权(我只能将设备配置为在IP+端口上发送数据),所以我不知道数据是如何来的。下面是我的访问日志

1
[23/Jan/2016:01:50:32 +0530]"(009591810720BP05000009591810720160122A1254.6449N07738.5244E000.0202007129.7200000000L00000008)" 400 172"-""-""-"

现在我看到了这个链接,关于如何获取URL参数值,但是我不知道这里的参数是什么。

我试图将wsgi.py文件修改为

1
2
3
4
5
6
7
8
import requests
r = requests.get("http://localhost.com/")
# or r = requests.get("http://localhost.com/?") as i am directly routing incoming http request to python script and incoming HTTP request might not have #any parameter, just data #
text1 = r.status_code

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return ["<h1 style='color:blue'>Hello There shailendra! %s" %(text1)]

但当我重新启动nginx时,我得到了internal server error。有人能帮助我理解我在这里做的错误吗(实际上我对应用程序函数的参数一无所知)。尝试阅读此链接,但我从这里得到的是environn参数负责许多cgi环境变量。)

有人能帮我弄清楚我做错了什么,并指导我去看医生或资源吗?

谢谢。


你为什么使用localhost".com"?因为你是相同的机器上运行的Web服务器。你应该改变线。

1
 r = requests.get("http://localhost/")

因此,移动从下面的wsgi.py看跌线和他们testserverconnection.py

1
2
3
4
 import requests
 r = requests.get("http://localhost/")
 # or r = requests.get("http://localhost.com/?") as i am directly routing           incoming http request to python script and incoming HTTP request might not have      #any parameter, just data #
 text1 = r.status_code

启动nginx所以,你可能要运行(我不确定集对uwsgi nginx的)

1
    uwsgi --socket 0.0.0.0:8080 --protocol=http -w wsgi

运行testconnection.py发送请求到Web服务器和本地测试打印响应


我有我的问题的答案。一个基本的TCP请求流程A,你需要打开一个TCP套接字和接受请求on a特异性端口(你指定的硬件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):

def handle(self):
    # self.request is the TCP socket connected to the client
    self.data = self.request.recv(1024).strip()
    print"{} wrote:".format(self.client_address[0])
    #data which is received
    print self.data

if __name__ =="__main__":
#replace IP by your server IP
HOST, PORT = <IP of the server>, 8000

# Create the server, binding to localhost on port 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()

您的数据后,你可以做任何事情的数据。什么是共享数据格式的GPS数据表中,我可以得到解析的字符串和LAT和长出它。