做模拟登陆的时候,关于httpwebrequest的Referer属性,作用是告诉服务器这个请求是从哪里跳转来的,哪为什么把这个请求的链接直接放到浏览器打开却是可以,这明显不是跳转嘛,为什么会这样?
还有,它为什么要跟AllowAutoRedirect = true放一起才起作用,allowautoredirect这个属性不是说明这个请求能不能自动跳转吗,那就不关referer的事了,那为什么还要放一起

解决方案 »

  1.   


    直接在浏览器打开,Referer可能为空,能跳转,说明这个服务器可以设置Referer为空
    如果你要访问百度去把Referer设置为360.cn,那就有可能会拒绝
      

  2.   


    AllowAutoRedirect是客户端这边的操作
    和referer没有关系的
    如果服务端能跳转,把AllowAutoRedirect=true,那就跳转吧
    如果服务端能跳转,把AllowAutoRedirect=false,那就不用跳转
    如果服务端不能跳转,把AllowAutoRedirect=true,还是不能跳转
      

  3.   

    当你打开一个网页,然后浏览器去请求这个网页引用的图片,在请求图片的get中会发送Referer给服务器。当你点了这个网页的一个链接打开另一个网页的时候,这个请求也会包含原先网页地址,作为Referer参数发送给服务器。因此,Referer有很多作用,比如图片防盗链,统计链接引用来源,为特定请求做服务器缓存等等。总而言之,referer是http请求的一个字段。AllowAutoRedirect是httpwebrequest的一个属性,用来指定httpwebrequest如何提交请求,当AllowAutoRedirect允许的时候,httpwebrequest提交get或者post请求给服务器,服务器如果返回了301/302状态,并且告诉httpwebrequest,httpwebrequest会继续将请求发送给跳转后的地址,直到服务器返回数据,对于客户端来说,仿佛你看不到发生了跳转。而AllowAutoRedirect禁用的时候httpwebrequest提交数据一旦收到301/302状态,它会忠实地向你返回这一切,由你决定进一步处理,你需要额外的代码获取跳转地址,并且除非你自己接着请求,否则无法得到跳转后的网页。总而言之,AllowAutoRedirect和http请求没有任何关系。
      

  4.   

    模拟登陆的时候一定要referer,但直接在浏览器上打开就不用,为什么啊?
      

  5.   

    但是服务器端分辨不出你是所谓“模拟登录”还是“浏览器”登录,本质上说,你用所谓的htttpwebrequest无非就是山寨了一个特殊用途的浏览器而已,不存在什么模拟的不模拟的。
      

  6.   

    真心感谢caozhy和SocketUpEx两位大侠,分数不多,望笑纳