我有一个第三方服务器URL,可在浏览器中打开pdf文件。在可以访问pdf之前,必须对请求进行身份验证,以便身份验证信息集成在url中。因此它的格式如下:
SERVER_IP:/runReport.jsp?&jrs.cmd = jrs.get_subnodes&jrs.authorization = YWRtaW46YWRtaW4 =&jrs.report_sheet $ Report = true&jrs.catalog = / cata / catafolder / cataname.cat&jrs.report = / cata / catafolder / container。 cls&jrs.result_type = 2&jrs.profile = myProfile&jrs.param $ InputAD; 1_ @ assignmentId = AD0000695585
jrs.authorization = YWRtaW46YWRtaW4 =
是附加到URL的授权信息。我开发了两段代码。 .NET 4.6中的一个是:
HttpClient client = new HttpClient();
string param= "someparamvalue";
string url = UrlBuilder(param);
HttpResponseMessage message = client.GetAsync(url).Result;
HttpContent content = message.Content;
System.IO.Stream stream = content.ReadAsStreamAsync().Result;
FileStream fs = File.Create($"exported\\{param}.pdf");
stream.CopyTo(fs);
fs.Close();
stream.Close();
它成功下载了“已导出”文件夹中的pdf文件。
我们在.NET 3.5中有一个限制(不能在计算机上立即安装.NET 4+),因此我在3.5中使用以下代码进行了尝试:
string param= "someparamvalue";
string url = UrlBuilder(param);
string fileName = $"exported\\{param}.pdf";
WebClient wc = new WebClient();
wc.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36");
wc.Headers.Add(HttpRequestHeader.Accept, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
wc.DownloadFile(url, fileName);
但所有下载的是pdf,是1)无法用pdf阅读器打开(出现消息,提示“文件不被支持或已损坏...”)2)我仍然可以在“ Notepad ++”,我看到了用于登录网页的html。 (因此,即使URL中存在授权信息,它仍然无法对用户进行身份验证)
任何东西,我都缺少这两个代码对于相同请求的不同工作方式?我用3.5代码做什么错?