C# WebClient - 从 URI 而不是 CSV 获取 HTML

Posted

技术标签:

【中文标题】C# WebClient - 从 URI 而不是 CSV 获取 HTML【英文标题】:C# WebClient - Getting an HTML from URI instead of CSV 【发布时间】:2017-07-28 17:53:42 【问题描述】:

我正在尝试使用 C# WebClient 从以下 uri 获取 csv 文件。

var copUri ="http://obieebr.banrep.gov.co/analytics/saw.dll?Go&Path=%2fshared%2fSeries%20Estad%c3%adsticas_T%2f1.%20IBR%2f1.1.IBR_CSV_XML_ultimos_datos&download_type=csv&NQUser=publico&NQPassword=publico"
var client = new WebClient();
var content = client.DownloadString(copUri);

当我在浏览器中尝试时,我得到了 csv 文件,但上面的代码正在返回身份验证 html 文件。如何通过这个 html 响应来获取 csv 文件?

【问题讨论】:

您是否尝试过使用 WebClient.DownloadFile() 方法? 看起来在初始命中时,它设置了一些 cookie。您将需要使用可识别 cookie 的客户端,访问 URI,然后再次访问相同的 URI。只有第二次,它才会给你 CSV。 您正在从 Oracle BI 下载报告,该报告具有非常重的会话意识,并且就像 @Kyle 指出的那样,在第一个请求时设置了一些会话 cookie,例如 ORA_BIPS_LBINFOORA_BIPS_NQID。我对Oracle BI不熟悉,但也许你可以在***.com/questions/tagged/obiee问这个问题。 尝试使用以下cookie-aware webclient (***.com/questions/2825377/…),但问题依然存在.. 【参考方案1】:

您已通过 uri 传递授权凭据。

由于未经身份验证的活动,服务器拒绝了您的请求。

【讨论】:

URI 中的“...&NQUser=publico&NQPassword=publico”部分不足以通过身份验证? 他们已经应用了基于令牌的身份验证,您应该需要令牌进行授权。请先在邮递员、ARC 或任何其他客户端应用程序中尝试。【参考方案2】:

问题超出了对 cookie 的认识 - csv 是在浏览器中使用 javascript 编译的。通过使用 Casperjs 渲染混淆的 javascript 然后从底层实例获取数据来解决。

【讨论】:

以上是关于C# WebClient - 从 URI 而不是 CSV 获取 HTML的主要内容,如果未能解决你的问题,请参考以下文章

webclient c# 中不支持 URI 格式

由于我的基本 URI 不固定,在 Webflux 中一次又一次地创建 Webclient 是不是明智?

C# WebClient 禁用缓存

C#高级编程第三版--31.1.3上传文件

C# 发送Http请求 - WebClient类

C#使用WebClient与WebRequest有啥不同