- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Python 的 BaseHTTPRequestHandler 对于通过邮寄发送的表单有问题!
我看到其他人问同样的问题(Why GET method is faster than POST?),但我的时间差太大(1 秒)
Python 服务器:
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import datetime
def get_ms_since_start(start=False):
global start_ms
cur_time = datetime.datetime.now()
# I made sure to stay within hour boundaries while making requests
ms = cur_time.minute*60000 + cur_time.second*1000 + int(cur_time.microsecond/1000)
if start:
start_ms = ms
return 0
else:
return ms - start_ms
class MyServer(BaseHTTPRequestHandler, object):
def do_GET(self):
print "Start get method at %d ms" % get_ms_since_start(True)
field_data = self.path
self.send_response(200)
self.end_headers()
self.wfile.write(str(field_data))
print "Sent response at %d ms" % get_ms_since_start()
return
def do_POST(self):
print "Start post method at %d ms" % get_ms_since_start(True)
length = int(self.headers.getheader('content-length'))
print "Length to read is %d at %d ms" % (length, get_ms_since_start())
field_data = self.rfile.read(length)
print "Reading rfile completed at %d ms" % get_ms_since_start()
self.send_response(200)
self.end_headers()
self.wfile.write(str(field_data))
print "Sent response at %d ms" % get_ms_since_start()
return
if __name__ == '__main__':
server = HTTPServer(('0.0.0.0', 8082), MyServer)
print 'Starting server, use <Ctrl-C> to stop'
server.serve_forever()
用python服务器获取请求非常快
time curl -i http://0.0.0.0:8082\?one\=1
打印
HTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.7.6
Date: Sun, 18 Sep 2016 07:13:47 GMT
/?one=1curl http://0.0.0.0:8082\?one\=1 0.00s user 0.00s system 45% cpu 0.012 total
在服务器端:
Start get method at 0 ms
127.0.0.1 - - [18/Sep/2016 00:26:30] "GET /?one=1 HTTP/1.1" 200 -
Sent response at 0 ms
瞬间!
向 python 服务器发送表单时的 Post 请求非常慢
time curl http://0.0.0.0:8082 -F one=1
打印
--------------------------2b10061ae9d79733
Content-Disposition: form-data; name="one"
1
--------------------------2b10061ae9d79733--
curl http://0.0.0.0:8082 -F one=1 0.00s user 0.00s system 0% cpu 1.015 total
在服务器端:
Start post method at 0 ms
Length to read is 139 at 0 ms
Reading rfile completed at 1002 ms
127.0.0.1 - - [18/Sep/2016 00:27:16] "POST / HTTP/1.1" 200 -
Sent response at 1002 ms
具体来说,self.rfile.read(length) 对于非常少的表单数据需要 1 秒
向 python 服务器发送数据(不是表单)时的 Post 请求非常快
time curl -i http://0.0.0.0:8082 -d one=1
打印
HTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.7.6
Date: Sun, 18 Sep 2016 09:09:25 GMT
one=1curl -i http://0.0.0.0:8082 -d one=1 0.00s user 0.00s system 32% cpu 0.022 total
在服务器端:
Start post method at 0
Length to read is 5 at 0
Reading rfile completed at 0
127.0.0.1 - - [18/Sep/2016 02:10:18] "POST / HTTP/1.1" 200 -
Sent response at 0
node.js 服务器:
var http = require('http');
var qs = require('querystring');
http.createServer(function(req, res) {
if (req.method == 'POST') {
whole = ''
req.on('data', function(chunk) {
whole += chunk.toString()
})
req.on('end', function() {
console.log(whole)
res.writeHead(200, 'OK', {'Content-Type': 'text/html'})
res.end('Data received.')
})
}
}).listen(8082)
将表单发送到 node.js 服务器时的 Post 请求非常快
time curl -i http://0.0.0.0:8082 -F one=1
打印:
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Content-Type: text/html
Date: Sun, 18 Sep 2016 10:31:38 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Data received.curl -i http://0.0.0.0:8082 -F one=1 0.00s user 0.00s system 42% cpu 0.013 total
最佳答案
我认为这是您问题的答案:libcurl delays for 1 second before uploading data, command-line curl does not
libcurl 正在发送 Expect 100-Continue header ,并在发送表单数据之前等待 1 秒的响应(在 -F 命令的情况下)。
在 -d 的情况下,无论出于何种原因,它都不会发送 100-Continue header 。
关于http - 为什么 do_GET 比 do_POST 快得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39555144/
我想扩展 SimpleHTTPRequestHandler 并覆盖 do_GET() 的默认行为。我从我的自定义处理程序返回一个字符串,但客户端没有收到响应。 这是我的处理程序类: DUMMY_RES
Python 的 BaseHTTPRequestHandler 对于通过邮寄发送的表单有问题! 我看到其他人问同样的问题(Why GET method is faster than POST?),但我
我正在使用 BaseHTTPServer 来提供网络内容。我可以提供内容类型“text/html”或“text/css”甚至“text/js”,并在浏览器端呈现。但是当我尝试 self.send_he
我对 Python 比较陌生,但最近用它做了很多不同的事情,我非常喜欢它。但是,我遇到了以下代码的麻烦/阻塞。 import http.server import socketserver impor
我对 Python 比较陌生,但最近用它做了很多不同的事情,我非常喜欢它。但是,我遇到了以下代码的麻烦/阻塞。 import http.server import socketserver impor
我需要设置一个返回几个 3MB 文件的 Python 网络服务器。它使用 baseHTTPServer 来处理 GET 请求。如何使用 wfile.write() 发送 3MB 的文件? from S
我是一名优秀的程序员,十分优秀!