1

我正在使用 WinInet 尝试将文件上传到 Hadoop。我正在做我能正确想到的一切。IOW,我正在关注 WebHDFS 的 REST API,包括获取重定向,然后使用重定向中提供的 URI 发送新请求。当我发出第二个请求时,我可以从 Fiddler 的间谍活动中看到它返回的 HTTP 状态代码为 201,就像它应该的那样。

第二个请求类似于:

  1. HttpOpenRequest()使用 PUT 动词调用 WinInet 所需的东西(成功)
  2. HttpSendRequestEx()使用除 hRequest 之外的所有 NULL 调用(成功)
  3. 使用将数据写入文件InternetWriteFile()(成功写入的正确字节数与我尝试写入的字节数相同)
  4. 调用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 是否有我遗漏的任何技巧?

4

0 回答 0