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_LBINFO
和 ORA_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的主要内容,如果未能解决你的问题,请参考以下文章