Python rfile.read()是如何工作的?
我正在通过POST将python脚本中包含字符串的文本文件发送到我的服务器:Python rfile.read()是如何工作的?,python,http,post,Python,Http,Post,我正在通过POST将python脚本中包含字符串的文本文件发送到我的服务器: fo = open('data'.txt','a') fo.write("hi, this is my testing data") fo.close() with open('data.txt', 'rb') as f: r = requests.post("http://XXX.XX.X.X", data = {'data.txt':f}) f.close() 并在我的服务器处理程序脚本中接收和
fo = open('data'.txt','a')
fo.write("hi, this is my testing data")
fo.close()
with open('data.txt', 'rb') as f:
r = requests.post("http://XXX.XX.X.X", data = {'data.txt':f})
f.close()
并在我的服务器处理程序脚本中接收和处理它,基于在线发现的示例:
def do_POST(self):
data = self.rfile.read(int(self.headers.getheader('Content-Length')))
empty = [data]
with open('processing.txt', 'wb') as file:
for item in empty:
file.write("%s\n" % item)
file.close()
self._set_headers()
self.wfile.write("<html><body><h1>POST!</h1></body></html>")
取我的数据长度(整数,#字节/字符)并读取我的文件?我对它如何知道我的数据包含什么感到困惑。HTTP的幕后工作是什么
它输出data.txt=hi%2C+this+is+my+testing+data
到my processing.txt,但我希望“嗨,这是我的测试数据”
我试图找到rfile.read()的确切功能的文档,但失败了,如果只是找到它就回答了我的问题,我将不胜感激,我可以删除这个问题。您的客户机代码片段读取文件
data.txt
中的内容,并向您的服务器发出POST请求,其中的数据结构为键值对。在这种情况下,发送到服务器的数据是一键data.txt
,相应的值是文件的内容
服务器代码段读取整个HTTP请求正文并将其转储到文件中。由客户端构造并发送的键值对的格式可以由Python的内置库urlparse
解码
以下是一个可行的解决方案:
def do_POST(self):
length = int(self.headers.getheader('content-length'))
field_data = self.rfile.read(length)
fields = urlparse.parse_qs(field_data)
这段代码可耻地借用自:
如果要将文本文件的内容提取回来,将以下行添加到上述代码段可能会有所帮助:
data_file = fields["data.txt"]
要了解更多关于这些信息是如何为HTTP编码的,请阅读以下网址的更多信息:我明白了,我想我明白了。你能澄清一下“rfile”是什么吗?我知道read()内置于Python中。您可以在此处阅读更多信息:。基本上,它是一个包含来自请求主体的所有内容的流。这通常是由Python的内置
BaseHTTPRequestHandler
或其派生类设置的,以便在调用函数时可以访问。为什么这样做很丢脸?你应该毫不羞愧地相信这个想法
data_file = fields["data.txt"]