我有一些连接到HTTP API的代码,并且应该获得XML响应。将API链接放置在浏览器中时,浏览器会将XML下载为文件。但是,当代码连接到相同的API时,将返回HTML。我已经告诉API所有者,但他们认为没有什么错。有没有办法捕获下载的文件而不是HTML?
我尝试设置标题以使我的代码看起来像浏览器。还尝试使用WebRequest代替WebClient。但是什么都行不通。
这是代码,URL在浏览器中有效(下载文件),但不适用于WebClient:
WebClient webClient = new WebClient();
string result = webClient.DownloadString(url);
代码应该以某种方式获取XML文件而不是页面HTML(实际上HTML不会显示在浏览器中,只会显示在文件中)。
答案 0 :(得分:0)
您访问的uri可能是具有自己机制的HTML页面(例如生成实际的下载地址,该地址可能由服务器动态生成并重定向到它,以防止外部链接访问)以访问实际文件。
应该使用CefSharp之类的浏览器后台浏览器核心来运行HTML及其JavaScript来进行导航,也许您可能想钩住download事件来处理下载。
答案 1 :(得分:0)
我认为您需要向accept
对象添加WebClient
标头。
using (var client = new WebClient())
{
client.Headers[HttpRequestHeader.Accept] = "application/xml;q=1";
string result = webClient.DownloadString(url);
}
答案 2 :(得分:0)
谢谢大家的投入。最后,这是由我们的供应商切换到TLS 1.2引起的。我只需要强制我的代码使用1.2,然后它就可以工作。