我被一个问题卡住了。
我需要用 Delphi 上传一个文件(CSV文件)到服务器。服务器有一定的要求,必须遵循:
- 请求必须是HTTP PUT请求。
- URL请求中必须包含客户端ID,如下所示:
example.com/upload/{Client ID}
(将替换{Client ID}
)。 - 在URL中客户端ID之后必须包含将来接收的文件名,如下所示:
example.com/upload/{Client ID}/{Future File Name}
({Future File Name}
将被替换),它可以与本地文件名不同。 - API密钥必须位于请求标头中(标头名称:
x-api-key
)。示例:lXViWTzFic9sM8qe9Ew7JME8xTdBAOMJHdIjK7XkjQ00OWr
.
我可以在CURL中执行此操作,如下例所示:(客户ID:d32krpq
,以及未来文件名:(一个月七个月一次)
curl -v -X PUT https://example.com/upload/d32krpq/20181023_update.csv --upload-file 20181023_update.csv --header "x-api-key: lXViWTzFic9sM8qe9Ew7JME8xTdBAOMJHdIjK7XkjQ00OWr"
如何使用 Delphi 组件(使用TNetHttpClient
或TRESTClient
)实现这一点?
2条答案
按热度按时间ctzwtxfj1#
在 Delphi 中,在两个HTTP客户端框架中,都可以在
PUT
请求中发送多个字段(文件、自定义头、主体字段...):在
TNetHTTPClient
中,通过Put()
方法,你可以使用重载的函数和本地文件路径的字符串参数。并且在TNetHeaders
对象的函数的可选参数中,你指定你的自定义头参数。TNetHeaders
是TNameValuePair
记录的动态数组。因此,您必须创建
TNameValuePair
的动态数组,然后使用API密钥创建TNameValuePair
记录的示例,并将其添加到动态数组中。除了在
TNetHTTPClient
中,您必须自己在URL的请求中直接指定URL segments参数。最后,使用文件路径的字符串和
TNetHeaders
对象调用Put()
方法,如下例所示:对于REST客户端库,可以简单地使用
TRESTRequest.AddFile()
函数添加文件,也可以使用AddParameter()
函数添加任何自定义字段作为正文、URL段或头参数。TRESTClient
的另一个优点是可以使用基本URL或定义URL段的资源,如"example.com/upload/{Client ID}/{Future File Name}"
。将组件
TRESTClient
、TRESTRequest
和TRESTResponse
放到表单上,将TRESTClient.BaseURL
设置为上传服务器,然后编写代码。yfwxisqw2#
下面是使用Indy的
TIdHTTP
组件的另一种方法: