HttpWebRequest用GET方式请求数据时,总是提示无权访问该页面

hanjiangying 2019-02-08 11:18:01
写了一个客户端软件向某个网站页面发起查询请求并获取返回的JSON数据,函数代码如下:
public string doGetRequest(string cookie, string url)
{
Uri uri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.AllowAutoRedirect = false;
request.Accept = "application/json";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
if (cookie.Length > 0)
{
request.Headers.Add("Cookie", cookie);
}
HttpWebResponse response;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
response = (HttpWebResponse)ex.Response;
StreamReader sr = new StreamReader(response.GetResponseStream());
MessageBox.Show(sr.ReadToEnd());
}
if (response.StatusCode != HttpStatusCode.OK)
{
MessageBox.Show("服务器返回请求错误!");
return "";
}
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string result = reader.ReadToEnd();
//释放资源
response.Close();
reader.Close();
return result;
}


调用该函数时传入事先获取的cookie和请求url,url的值如下(网站域名用*省略):
http://*********/tcatsds/tcaTsdApprover/searchAllTcatsd?APPLYNO=P20190098290

可是程序总是报错,说GetResponse返回502错误,查看返回的详细信息如下:


从返回的详细信息上看是无权访问该页面,但是我如果在浏览器中直接输入该url,是能看到返回的JSON数据的;另外我尝试用WebClient来获取数据也是一样的问题;把GET换成POST还是一样的问题。

哪位大神能指导一下该怎么办??
...全文
199 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanjiangying 2019-02-08
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
502错误 一般表示请求的头格式有误。但你没有给出目标 url,也无法判定

但 传入事先获取的cookie,这一行为是不可取的,假如 cookie 传递的是 sessionid 或 token,那就应是即时获取的


我的cookie是这样处理的,你看是否有问题:每次程序启动后首先在WebBrowser控件上显示登陆页面,输入用户名密码登录,登录成功则获取cookie并作为全局变量保存,然后再拿这个cookie设置到HttpWebRequest里去发起请求。

我试过用这个cookie去访问系统的其他页面都正常
xuzuning 2019-02-08
  • 打赏
  • 举报
回复
502错误 一般表示请求的头格式有误。但你没有给出目标 url,也无法判定 但 传入事先获取的cookie,这一行为是不可取的,假如 cookie 传递的是 sessionid 或 token,那就应是即时获取的
hanjiangying 2019-02-08
  • 打赏
  • 举报
回复
搞明白了,确实是头格式有误,是因为服务器返回的Encoding为gzip,而我的请求Header中没有设置这个Accept-Encoding为gzip,导致无法获取数据。

使用HttpWebRequest重点要关注以下几个标头字段,供其他人参考:
Method
Accept
Accept-Encoding
UserAgent
Cookie
如果确认这几个字段设置没问题,那么就借助于fiddler软件去抓包分析吧,跟浏览器访问时的数据包对比,总能找出原因来

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧