- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用SimpleHTTPServer的do_POST方法来接收文件。如果我使用curl上传png文件,则脚本运行良好,但是每当我使用python请求库上传文件时,文件都会上传但损坏。这是SimpleHTTPServer代码
#!/usr/bin/env python
# Simple HTTP Server With Upload.
import os
import posixpath
import BaseHTTPServer
import urllib
import cgi
import shutil
import mimetypes
import re
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
# Simple HTTP request handler with POST commands.
def do_POST(self):
"""Serve a POST request."""
r, info = self.deal_post_data()
print r, info, "by: ", self.client_address
f = StringIO()
if r:
f.write("<strong>Success:</strong>")
else:
f.write("<strong>Failed:</strong>")
length = f.tell()
f.seek(0)
self.send_response(200)
self.send_header("Content-type", "text/html")
self.send_header("Content-Length", str(length))
self.end_headers()
if f:
self.copyfile(f, self.wfile)
f.close()
def deal_post_data(self):
print self.headers
boundary = self.headers.plisttext.split("=")[1]
print 'Boundary %s' %boundary
remainbytes = int(self.headers['content-length'])
print "Remain Bytes %s" %remainbytes
line = self.rfile.readline()
remainbytes -= len(line)
if not boundary in line:
return (False, "Content NOT begin with boundary")
line = self.rfile.readline()
remainbytes -= len(line)
fn = re.findall(r'Content-Disposition.*name="file"; filename="(.*)"', line)
if not fn:
return (False, "Can't find out file name...")
path = self.translate_path(self.path)
fn = os.path.join(path, fn[0])
line = self.rfile.readline()
remainbytes -= len(line)
line = self.rfile.readline()
remainbytes -= len(line)
try:
out = open(fn, 'wb')
except IOError:
return (False, "Can't create file to write, do you have permission to write?")
preline = self.rfile.readline()
remainbytes -= len(preline)
while remainbytes > 0:
line = self.rfile.readline()
remainbytes -= len(line)
if boundary in line:
preline = preline[0:-1]
if preline.endswith('\r'):
preline = preline[0:-1]
out.write(preline)
out.close()
return (True, "File '%s' upload success!" % fn)
else:
out.write(preline)
preline = line
return (False, "Unexpect Ends of data.")
def translate_path(self, path):
"""Translate a /-separated PATH to the local filename syntax.
Components that mean special things to the local file system
(e.g. drive or directory names) are ignored. (XXX They should
probably be diagnosed.)
"""
# abandon query parameters
path = path.split('?',1)[0]
path = path.split('#',1)[0]
path = posixpath.normpath(urllib.unquote(path))
words = path.split('/')
words = filter(None, words)
path = os.getcwd()
for word in words:
drive, word = os.path.splitdrive(word)
head, word = os.path.split(word)
if word in (os.curdir, os.pardir): continue
path = os.path.join(path, word)
return path
def copyfile(self, source, outputfile):
"""Copy all data between two file objects.
The SOURCE argument is a file object open for reading
(or anything with a read() method) and the DESTINATION
argument is a file object open for writing (or
anything with a write() method).
The only reason for overriding this would be to change
the block size or perhaps to replace newlines by CRLF
-- note however that this the default server uses this
to copy binary data as well.
"""
shutil.copyfileobj(source, outputfile)
def test(HandlerClass = SimpleHTTPRequestHandler,
ServerClass = BaseHTTPServer.HTTPServer):
BaseHTTPServer.test(HandlerClass, ServerClass)
if __name__ == '__main__':
test()
#!/usr/bin/python
import requests
files = {'file': open('test.png', 'rb')}
r = requests.post('http://192.168.5.134:8000', files=files)
print r.request.headers
最佳答案
curl
和request
的 header 稍有不同,curl
的附加空行,而requests
的则没有。
用以下块替换preline = self.rfile.readline()
if line.strip():
preline = line
else:
preline = self.rfile.readline()
关于Python SimpleHTTPServer接收文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39788591/
是否有一个简单的 java/jvm/groovy 服务器可用于像“python -m SimpleHTTPServer”http://docs.python.org/2/library/simpleh
我通过 ssh 连接到 VPN(Linux 计算机)并在那里调用以下命令: sibi::bash-> python -m SimpleHTTPServer Serving HTTP on 0.0.0.
我正在尝试使用 Python 中内置的 SimpleHTTPServer 在本地提供静态页面。我使用 python -m SimpleHTTPServer 启动它。 目前,HTML 只是
最近我一直在使用 Python 来发现它的潜力,并且偶然发现了 SimpleHTTPServer。 我在 Windows 10 上。 我跑: python -m SimpleHTTPServer 输出
我正在尝试编写一个启动服务器然后启动浏览器以查看服务内容的 shell 脚本 (cd app && python -m SimpleHTTPServer) & open http://localhos
是否可以使用 SimpleHTTPServer 提供子目录而不是当前目录? 我像这样从命令行使用它: python -m SimpleHTTPServer 5002 我想使用它的原因是我有一个 tar
我正在使用 SimpleHTTPServer 制作简单的文件共享实用程序。我希望能够在 http 传输完成时捕获,即客户端文件下载完成时。那时我想执行一些操作。这可能吗? 最佳答案 您可以覆盖 Sim
一个 Python 网络服务器开始于 python -m SimpleHTTPServer 将在控制台打印它已接受的请求。我可以让它打印返回连接被拒绝给客户端的请求吗? 我正在尝试调试它拒绝来自 An
我已经开始在 Mac OS X Bash 中使用 Python SimpleHTTPServer 来帮助进行前端模板化,而不是 MAMP。我喜欢这种简单性,但想知道是否有一种方法可以使用 includ
我正在从 powershell 运行 SimpleHTTPServer。 python -m SimpleHTTPServer 8080 我想在不关闭终端的情况下退出(control + break
可以通过以下方式从外部网络设置和访问 Apache 服务器: http://lifehacker.com/124212/geek-to-live--how-to-set-up-a-personal-h
我正在使用 python -m SimpleHTTPServer对于一个小项目。文件 index.html 引用了一些视频。 此文件的大小为 159 MB。当我尝试下载它时,SimpleHTTPSer
如何保存控制台的输出 “192.168.1.1 - - [18/Aug/2014 12:05:59] 代码 404,找不到消息文件” 到一个文件? 代码如下: import SimpleHTTPSer
我想用 Python 提供静态文件。 Python 3 http.server 是否适合在生产中使用?如果不是,为什么不呢?我有什么选择? 最佳答案 引用文档 https://docs.python.
我的应用程序使用以下简单的线程文件服务器: class FileServer(Thread): """Simple file server exposing the current direc
我最近一直在使用 Python 的 SimpleHTTPServer 在我的网络上托管文件。我想要一个自定义的 404 页面,所以我对此进行了研究并得到了一些答案,但我仍然想使用我拥有的这个脚本。那么
是否可以使用 simplehttpserver 添加基本身份验证? 我想使用 SimpleHTTPServer 限制对网站的访问 最佳答案 我最近写了 sauth为此原因。只是https://gith
我有:我创建了 index.html - 最简单的 html 页面并使用 python -m SimpleHttpServer 8000 启动我的简单 http 服务器。 我想要:制作index.ht
我正在使用 SimpleHTTPServer 提供目录服务并在本地运行 html 代码。在那里,我使用 getusermedia api 来拍摄一些照片。如果我使用js localstorage来存储
我有一个简单的脚本,用于查看我正在处理的网页。 import SimpleHTTPServer import SocketServer PORT = 8000 Handler = SimpleHTTP
我是一名优秀的程序员,十分优秀!