HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = 300000;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, nowCharset);
html = reader.ReadToEnd();我用以上代码请求这个页面
http://61.152.237.204:8081/query_result.asp?wen=268788104000
得到的的html和直接在浏览器浏览时的结果不同,好像是服务端那边做了些手脚限制
我得到的html是有这样一个js
function decoder() {
    var kvbb = new Array(247, 106, 100, 194, 95, 151, 69, 76, 106, 142, 21, 32, 189, 20, 52, 217, 58, 209, 124, 93, 199, 185, 50, 40, 2, 3, 215, 76, 184, 145, 169, 23, 164, 45, 185, 183, 206, 80, 143, 144, 20, 18);
    var i = 3;
    do {
        kvbb[i] = (kvbb[i] + kvbb[i + 1]) & 0xff;
    } while (++ zlv <= 40 );
    var zlv = 40;
    for (;;) {
        if (zlv < 4) break;
        kvbb[zlv] = (kvbb[zlv] - kvbb[zlv - 1]) & 0xff;
        zlv--;
    }
    var zlv = 40;
    do {
        kvbb[zlv] = (((((kvbb[zlv] - 126) & 0xff) - 241) & 0xff) >> 4) | ((((((kvbb[zlv] - 126) & 0xff) - 241) & 0xff) << 4) & 0xff);
    } while (-- zlv >= 4 );
alert(kvbb[1]+"-"+kvbb[2]+"-"+ kvbb[4]+"-"+ kvbb[5]+"-"+ kvbb[7]+"-"+ kvbb[14]+"-"+ kvbb[15]+"-"+ kvbb[17]+"-"+ kvbb[25]+"-"+ kvbb[28]+"-"+ kvbb[32]+"-"+ kvbb[33]+"-"+ kvbb[35]+"-"+ kvbb[40]);
    return String.fromCharCode(kvbb[1], kvbb[2], kvbb[4], kvbb[5], kvbb[7], kvbb[14], kvbb[15], kvbb[17], kvbb[25], kvbb[28], kvbb[32], kvbb[33], kvbb[35], kvbb[40]);
}
window.location = "/query_result.asp?wen=268788104000&" + decoder();会做一次跳转到http://61.152.237.204:8081/query_result.asp?wen=268788104000&jdfwkey=3jjiz3
3jjiz3应该是更具kvbb那个数组里面某个规律得到的,每次请求得到的kvbb数组都不同
请问大家有没有什么办法解决?

解决方案 »

  1.   

    因为用软件去打开URL的时候,有些js不会执行,当时用浏览器去打开的时候就能看得到执行后的效果了,这个在使用了AJAX的页面上看起来更明显。你所说的貌似跟这个有关。
    类似的情况我遇到过。
      

  2.   

    主要是HttpWebRequest没有执行js引起的,这个问题的解决办法有:
    1,使用IE WebBrowser控件,这个可以执行JS。
    2,自己解码,你看,算法都已经在上面的js代码里了,不算复杂,自己把array里面的数据解密出来就好了。
      

  3.   

    简单的做法你已经读取到页面的源代码了
    就可以替换window.location =....
    把window.location换成某个textbox,比如document.getElementById('txt1').value=后面的保留原样;
    这样textbox中就会显示出js执行之后的结果。然后你在通过一个button提交这个textbox中的url,后台再用WebRequest重新请求一下这个url。
      

  4.   

    你需要模拟一下浏览器,毕竟这个请求不是浏览器真实发送的请求,所有有些网张会过滤这个请求。
    HttpWebResponse rsp = null;HttpWebRequest req = null; req = (HttpWebRequest)WebRequest.Create(url);req.ContentType = "multipart/form-data";req.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";req.Method = "GET";rsp = (HttpWebResponse)req.GetResponse();
    然后就应该可以得到你想要的回应啦
      

  5.   

    感谢那么多位回复
    to jimh 我发现即使我执行了了那个js,然后做再做一次请求,也没办法,我用Fiddler监听http,请求那个页面的时候产生了我得到的代码,然后跳转,跳转后的那个页面http header 看到 ASPSESSIONIDSQDRDDCA=DADELDLDJPCADOKKIJHGPDJO的东西
    to lerit 我是模拟一个浏览器请求的,Accept和UserAgent都有,但还是这样,我想即使是用真的浏览器访问,他也会返回这样的html然后跳转的
      

  6.   

    to brz97 这样的话用户操作就多了一步了哦~
    jimh 的方法比较可行,不过不知是不是我哪里出了问题
      

  7.   

    第二次请求需要使用同一个cookie,这个你可以上网搜索一下,很容易的。