相关疑难解决方法(0)

静态类成员python

所以我使用的是静态类成员,因此我可以在类方法和同一个类的静态方法之间共享数据(只有1个类的实例化).我理解这很好,但我只是想知道静态成员什么时候被初始化?它是进口的吗?在第一次使用课程?因为我将从多个模块调用此类的静态成员(因此多于1个import语句).访问静态方法的所有模块是否共享相同的静态数据成员?如果我的主客户端删除了我的类的实例,然后重新创建它(没有完全终止或重新导入东西),我的数据成员是否会被保留?

python static static-variables

12
推荐指数
1
解决办法
1万
查看次数

如何使用BaseHTTPRequestHandler访问发送到我的服务器的数据?

我是Python的新手(使用v3.3)和网络编程,我整晚都在努力解决问题.我正在向我的服务器发出POST调用并向其发送一些数据,如下所示:

DATA = {"listName":"Test list","listDesc":"A test list with test stuff in it.","refreshMode":"Replace","DBKey":"1","UserDisplaySeq":"1"}
DATA = json.dumps(DATA)
METHOD = "POST"
DATA = DATA.encode("utf-8")
params = "account_id=acct 2"
try:
    URL = "http://localhost:8080/lists?" + quote_plus(params)
    request = urllib.request.Request(url=URL,data=DATA,method=METHOD)
    response = urllib.request.urlopen(request)
...
Run Code Online (Sandbox Code Playgroud)

我还有一个请求处理程序编码如下(这里有很多打印语句用于调试目的):

class MyHandler(BaseHTTPRequestHandler):
...
def do_POST(self):
    length = int(self.headers['Content-Length'])
    print("HEADERS: ", self.headers)
    print (str(length))
    print(self.rfile)
    post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8'))
    print(post_data)
Run Code Online (Sandbox Code Playgroud)

这会将以下结果打印到控制台:

Starting thread
started httpserver...
HEADERS:  Accept-Encoding: identity
User-Agent: Python-urllib/3.3
Content-Length: 138
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Connection: close


138
<_io.BufferedReader name=404>
{}
Run Code Online (Sandbox Code Playgroud)

我的问题: …

python post python-3.x basehttprequesthandler

6
推荐指数
1
解决办法
1万
查看次数

无法使用cgi.FieldStorage获取POST值

我试图通过GET向表单数据发送带有表单数据的简单html页面,然后通过POST从表单接收变量.HTML文件看起来像:

<HTML>
<title> My Title</title>
<body>
<form  method="post" action="http.py">
<input name="Name" type="text"/>
<input name="Submit" type="submit" value="Submit" />
</form>
</body>
</HTML>
Run Code Online (Sandbox Code Playgroud)

这是python脚本:

import os
import cgi
import sys
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler



class customHTTPServer(BaseHTTPRequestHandler):
        def do_GET(self):
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                fh=open('index.html','r')
                self.wfile.write(fh.read())
                return

        def do_POST(self):
            form = cgi.FieldStorage()
            self.send_response(200)
            self.end_headers()
            self.wfile.write(form['Name'].value)


def main():
       try:
            server = HTTPServer(('',9111),customHTTPServer)
            print 'server started at port 8080'
            server.serve_forever()
       except KeyboardInterrupt:
            server.socket.close()

if __name__=='__main__':
       sys.exit(main())
Run Code Online (Sandbox Code Playgroud)

但FieldStorage一直都是空的.我已经尝试检查self.rfile中的内容,并发现如果我尝试执行self.rfile.readlines(),浏览器卡住并看起来像脚本正在等待数据流的结束.我应该从哪里采取我用POST提交的Name变量?

python http

5
推荐指数
2
解决办法
1万
查看次数

扩展BaseHTTPRequestHandler - 获取发布的数据

我已经看到了这个问题,但我希望能够从处理程序访问外部POST的数据.

有没有办法做到这一点?

以下是代码:

import BaseHTTPServer

HOST_NAME = ''
PORT_NUMBER=8088

postVars = ''

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):

    def do_POST(s):
        s.send_response(200)
        s.end_headers()
        varLen = int(s.headers['Content-Length'])
        postVars = s.rfile.read(varLen)
        print postVars

server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)

try:
    httpd.handle_request()
except KeyboardInterrupt:
    pass

print postVars
httpd.server_close()
Run Code Online (Sandbox Code Playgroud)

postVars在Handler期间被评估,但不在MyHandler之后

python variables networking http

4
推荐指数
2
解决办法
1万
查看次数