苏飞论坛
标题: 当HttpHelper类遇到请求头含有 x-requested-with: XMLHttpRequest 的解决方法。。 [打印本页]
作者: cyberarmy 时间: 2013-5-7 14:11
标题: 当HttpHelper类遇到请求头含有 x-requested-with: XMLHttpRequest 的解决方法。。
在使用 HttpHelper类时遇到一个问题,就是当抓包时某些请求头里含有,x-requested-with: XMLHttpRequest
这个时候,按正常的请求参数,WebRequest请求始终得不到响应或者得到504.。
这时候只需要在 发送请求的时候添加以下代码即可:
[code=csharp]ProtocolVersion = new Version("1.0"); [/code]
作者: 站长苏飞 时间: 2013-5-7 14:17
没看懂,这种直接在Header里添加参数也行吧。如下代码[code=csharp]
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "http://www.sufeinet.com",//URL 必需项
Encoding = null,//编码格式(utf-8,gb2312,gbk) 可选项 默认类会自动识别
//Encoding = Encoding.Default,
Method = "get",//URL 可选项 默认为Get
};
item.Header.Add("x-requested-with", "XMLHttpRequest");
//得到HTML代码
HttpResult result = http.GetHtml(item);[/code]
你的这个写法要怎么用啊,只是写个ProtocolVersion = new Version("1.0");要怎么写到Httphelper里呢?
作者: yangying 时间: 2013-5-7 14:17
求用法
作者: cyberarmy 时间: 2013-5-7 21:37
直接加到 Header里貌似不行,我试过。
必须这样:
[code=csharp] /// <summary>
/// 为请求准备参数
/// </summary>
///<param name="objhttpItem">参数列表</param>
/// <param name="_Encoding">读取数据时的编码方式</param>
private void SetRequest(HttpItem objhttpItem)
{
// 验证证书
SetCer(objhttpItem);
//设置Header参数
if (objhttpItem.Header != null && objhttpItem.Header.Count > 0)
{
foreach (string item in objhttpItem.Header.AllKeys)
{
request.Headers.Add(item, objhttpItem.Header[item]);
}
}
// 设置代理
SetProxy(objhttpItem);
//请求方式Get或者Post
request.Method = objhttpItem.Method;
request.Timeout = objhttpItem.Timeout;
request.ProtocolVersion = new Version("1.0"); //加上这句
request.ReadWriteTimeout = objhttpItem.ReadWriteTimeout;
//Accept
request.Accept = objhttpItem.Accept;
//ContentType返回类型
request.ContentType = objhttpItem.ContentType;
//UserAgent客户端的访问类型,包括浏览器版本和操作系统信息
request.UserAgent = objhttpItem.UserAgent;
// 编码
encoding = objhttpItem.Encoding;
//设置Cookie
SetCookie(objhttpItem);
//来源地址
request.Referer = objhttpItem.Referer;
//是否执行跳转功能
request.AllowAutoRedirect = objhttpItem.Allowautoredirect;
//设置Post数据
SetPostData(objhttpItem);
//设置最大连接
if (objhttpItem.Connectionlimit > 0)
request.ServicePoint.ConnectionLimit = objhttpItem.Connectionlimit;
}[/code]
作者: yangying 时间: 2013-5-7 21:41
cyberarmy 发表于 2013-5-7 21:37 
直接加到 Header里貌似不行,我试过。
必须这样:
ProtocolVersion = new Version("1.0"); 楼主没看到你用这个啊,
你上面写的是苏飞Httphelper类的源代码,好像没什么变化吧
作者: cyberarmy 时间: 2013-5-7 21:43
站长苏飞 发表于 2013-5-7 14:17 
没看懂,这种直接在Header里添加参数也行吧。如下代码
你的这个写法要怎么用啊,只是写个ProtocolVersion ...
在加入这个代码的同时,修改 SetRequest方法。。
代码如下:
[code=csharp]item.Header.Add("x-requested-with", "XMLHttpRequest"); //必须[/code]
[code=csharp] /// <summary>
/// 为请求准备参数
/// </summary>
///<param name="objhttpItem">参数列表</param>
/// <param name="_Encoding">读取数据时的编码方式</param>
private void SetRequest(HttpItem objhttpItem)
{
// 验证证书
SetCer(objhttpItem);
//设置Header参数
if (objhttpItem.Header != null && objhttpItem.Header.Count > 0)
{
foreach (string item in objhttpItem.Header.AllKeys)
{
request.Headers.Add(item, objhttpItem.Header[item]);
}
}
// 设置代理
SetProxy(objhttpItem);
//请求方式Get或者Post
request.Method = objhttpItem.Method;
request.Timeout = objhttpItem.Timeout;
request.ProtocolVersion = new Version("1.0"); //必须
request.ReadWriteTimeout = objhttpItem.ReadWriteTimeout;
//Accept
request.Accept = objhttpItem.Accept;
//ContentType返回类型
request.ContentType = objhttpItem.ContentType;
//UserAgent客户端的访问类型,包括浏览器版本和操作系统信息
request.UserAgent = objhttpItem.UserAgent;
// 编码
encoding = objhttpItem.Encoding;
//设置Cookie
SetCookie(objhttpItem);
//来源地址
request.Referer = objhttpItem.Referer;
//是否执行跳转功能
request.AllowAutoRedirect = objhttpItem.Allowautoredirect;
//设置Post数据
SetPostData(objhttpItem);
//设置最大连接
if (objhttpItem.Connectionlimit > 0)
request.ServicePoint.ConnectionLimit = objhttpItem.Connectionlimit;
}[/code]
作者: yangying 时间: 2013-5-7 21:44
cyberarmy 发表于 2013-5-7 21:43 
在加入这个代码的同时,修改 SetRequest方法。。
代码如下:
看到了,你是说这两个参数都必须要加是吧。
作者: cyberarmy 时间: 2013-5-7 23:48
yangying 发表于 2013-5-7 21:44 
看到了,你是说这两个参数都必须要加是吧。
对,两个地方都需要设置。
作者: yangying 时间: 2013-5-8 06:15
cyberarmy 发表于 2013-5-7 23:48 
对,两个地方都需要设置。
嗯好的谢谢,我记录下,我们下次升级,也加下这个属性,可以发下你访问的那个网站吗
作者: yangying 时间: 2013-5-8 06:15
cyberarmy 发表于 2013-5-7 23:48 
对,两个地方都需要设置。
嗯好的谢谢,我记录下,我们下次升级,也加下这个属性,可以发下你访问的那个网站吗
作者: cyberarmy 时间: 2013-5-8 06:25
本帖最后由 cyberarmy 于 2013-5-8 06:29 编辑
yangying 发表于 2013-5-8 06:15 
嗯好的谢谢,我记录下,我们下次升级,也加下这个属性,可以发下你访问的那个网站吗
百度贴吧回帖的时候,请求头里就有。
(, 下载次数: 280)