尝试使用WinInet将文件上传到HDFS

时间:2015-06-12 00:27:15

标签: hdfs wininet webhdfs

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

第二个请求类似于:

  1. 使用动词PUT(成功)调用HttpOpenRequest()所需的WinInet内容
  2. 使用除hRequest(成功)
  3. 之外的所有NULL调用HttpSendRequestEx()
  4. 使用InternetWriteFile()将数据写入文件(成功写入的字节数与我尝试写的相同)
  5. 致电HttpEndRequest()(成功)
  6. 一切都成功,并且所有权利都应该在服务器上存储数据。相反,只有一个空文件。如果我使用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是否有任何技巧?

0 个答案:

没有答案