Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python rfile.read()是如何工作的?_Python_Http_Post - Fatal编程技术网

Python rfile.read()是如何工作的?

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() 并在我的服务器处理程序脚本中接收和

我正在通过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()
并在我的服务器处理程序脚本中接收和处理它,基于在线发现的示例:

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"]