【发布时间】:2015-05-12 17:31:08
【问题描述】:
我正在执行以下 HttpWebRequest:
private static void InvokeHealthCheckApi()
{
var webRequest = (HttpWebRequest)WebRequest.Create(Url);
string sb = JsonConvert.SerializeObject(webRequest);
webRequest.Method = "GET";
webRequest.KeepAlive = true;
webRequest.AllowAutoRedirect = true;
webRequest.ContentType = "application/json";
webRequest.UserAgent =
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36";
webRequest.CookieContainer = cookieJar;
using (HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse)
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
File.AppendAllText("C:\\httpResponse1.txt", response.Headers.ToString());
File.AppendAllText("C:\\httpResponse2.html", reader.ReadToEnd());
}
}
请求的响应以网页形式返回,内容如下: “脚本已禁用。单击提交继续。” (提交按钮)
点击提交按钮后,我得到一个提示,内容如下: "您要从 fr74a87d9.work.corp.net 打开还是保存 healthcheck.json(297 字节)?
单击“打开”按钮后,我收到了我希望收到的 json 数据。
我的问题是如何解析响应以获取我需要的 json 数据?获取网页作为初始响应并且必须深入获取 json 响应是否正常? StreamReader 无法解析响应,因为它是网页而不是 json 数据。
【问题讨论】:
-
无论您访问什么网站,都期望您完成与您在请求中所做的事情不同的事情。当您进行抓取时,您必须在浏览器中准确复制发送给客户端服务器的内容。
-
感谢马克的回复。我不确定我没有在网站期望的代码中复制什么。以下是我的代码正在执行的步骤:
-
1) HttpWebRequest "GET" 获取网页和相关的cookie信息。 2) 填充网页 formData (password, userid) 3) HttpWebRequest "POST" 到登录页面 4) 现在我已经登录了,我在 Web API 控制器 url 上执行 GET
标签: c# json httpwebrequest httpwebresponse