我正在使用WinInet尝试将文件上传到Hadoop。我正在做我能想到的一切。 IOW,我正在关注WebHDFS的REST API,包括获取重定向,然后使用重定向中提供的URI发送新请求。当我发出第二个请求时,我可以从Fiddler的间谍中看到它返回的HTTP状态代码为201。
第二个请求类似于:
HttpOpenRequest()
所需的WinInet内容HttpSendRequestEx()
InternetWriteFile()
将数据写入文件(成功写入的字节数与我尝试写的相同)HttpEndRequest()
(成功)一切都成功,并且所有权利都应该在服务器上存储数据。相反,只有一个空文件。如果我使用curl尝试相同的事情,它会成功。如果我使用Fiddle监视WinInet,我会看到一切都成功,除了我从未看到数据被写入服务器。
调用HttpEndRequest()后返回的标题是:
HTTP/1.1 201 Created
Cache-Control: no-cache
Expires: Fri, 12 Jun 2015 00:22:57 GMT
Date: Fri, 12 Jun 2015 00:22:57 GMT
Pragma: no-cache
Expires: Fri, 12 Jun 2015 00:22:57 GMT
Date: Fri, 12 Jun 2015 00:22:57 GMT
Pragma: no-cache
Location: webhdfs://quickstart.cloudera:8020/user/test.txt
Content-Type: application/octet-stream
Content-Length: 0
Server: Jetty(6.1.26.cloudera.4)
我的直觉说InternetWriteFile()中有些东西搞砸了,但我所做的所有返回代码和写入值都很好。
使用WinInet做一个我缺少的PUT是否有任何技巧?