在Android的DownloadManager中设置请求正文?

11

对于我的应用程序的下一步,我需要添加下载功能。用户选择他们想要下载的内容,如果愿意选择这么多,可以选择从1个文件到成千上万个文件。

我想使用Android内置的DownloadManager来提供此下载功能,但不幸的是,我无法看出如何在我的情况下实现它。

为了使目标服务器授权下载,我需要在请求正文中发送一些JSON。就像这样,如果我手动执行:

DataOutputStream output = new DataOutputStream(connection.getOutputStream());
output.writeBytes(rawData);
output.flush();

其中rawData是JSON字符串。请求正文始终设置为POST

我似乎找不到任何将此JSON字符串添加到DownloadManager的方法,而且在我能够这样做之前,服务器将始终拒绝下载。

我能想到的唯一其他解决方案(我非常希望避免),就是在我的服务器上编写一个PHP脚本,以获取一些GET参数,生成JSON,然后重定向请求。

是否有人知道我可以如何使用DownloadManager发送我的JSON数据?我正在下载的每个文件都需要自己的独特JSON字符串。

1个回答

0

在Android的下载管理器中,您无法这样做,请参见下载管理器问题,我有类似的需求,最终使用了HttpClient(Xamarin)。

示例代码-

using(var httpClient = new HttpClient()) {
  using(var request = new HttpRequestMessage(new HttpMethod("POST"), URL)) {
   request.Headers.TryAddWithoutValidation("User-Agent", userAgent);
   request.Headers.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
   request.Headers.TryAddWithoutValidation("Accept-Language", "en-US,en;q=0.5");
   request.Headers.TryAddWithoutValidation("Connection", "keep-alive");
   request.Headers.TryAddWithoutValidation("Referer",RefererURL);
   request.Content = new StringContent("YOUR_REQUEST_BODY_HERE");
   request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");

   var responser = await httpClient.SendAsync(request);
   return responser;
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接