我正在使用Lazarus 1.0.8(最新版本),我已经安装了Indy 10.我还有一个带有PHP脚本的网站,可以在服务器上保存一个文本文件(称为“stats.txt”)。我希望,使用我的程序,上传另一个包含统计信息文本的文本文件+我在备忘录中写的新文本。我不想让你为我写代码,你能不能给我一个关于我怎么办的建议呢?
我在想我可以在备忘录上下载“stats.txt”的内容,然后再次上传,但添加新文本。还有更好的方法吗?
答案 0 :(得分:4)
执行此操作的最佳方式取决于服务器提供的功能。如果服务器具有某种“附加”命令,则可以使用该命令和新文本发出请求,并让服务器更新其数据。查看服务器软件的文档。
它可能提供一个可以使用POST命令发送数据的URL。 Indy的TIdHTTP
组件有Post
方法;您可以提供URL和文本数据,它将负责建立HTTP连接,发送数据和解释任何响应。
如果服务器仅提供查询整个文本并接收整个文本的方法,那么您别无选择,只能执行问题中描述的内容:下载所有数据,在本地修改,然后更新服务器。 / p>
获取当前版本的数据可能涉及GET请求。 Indy的TIdHTTP
组件提供了几种Get
方法,这些方法可以获取URL并以字符串或流方式返回数据。
一旦修改了数据,您可能会发现可以发出POST请求,或者PUT,并包含更新的数据。
答案 1 :(得分:2)
问题在这里有两个部分:你如何通过HTTP上传文件,以及如何使用Lazarus实现这一目标?我们一次拿一个。
您通过发送POST请求并使用MIME多部分表单编码对文件进行编码来上传HTTP文件。这是一个特殊的协议,专门用于通过HTTP上传文件,这是服务器所期望的。
那么,如何使用多部分表单编码设置HTTP请求?你说你正在使用Indy 10,所以看看TIdMultiPartFormDataStream
单元中的IdMultipartFormData
类。一旦你查看了类的接口,它应该很简单,并且TidHTTP.Post()
方法的重载接受TIdMultiPartFormDataStream
对象作为输入。