如何获取HTTP Web请求以返回完整的源代码

时间:2012-12-27 19:00:57

标签: c# .net httpwebrequest httpwebresponse

我正在尝试检索网页的源代码,而我正在使用HTTPWebRequest,但只返回此内容:

<script type="text/javascript"> 
    window.location="index.php"; 
</script> 

我使用fiddler来比较chrome获取网页并将其与我的代码检索的内容进行比较。

Chrome位于左侧,VS代码位于右侧

http://i.stack.imgur.com/Hgk9w.png

我注意到的内容长度与chrome回来的时间一样大。我的代码内容长度通常约为70次,而铬通常会回收87000次。

我尝试过使用Stream和内存流。有人能指出我正确的方向吗?

以下是我的功能:

public string GetAllCampaings()
{
    string campaigns = null;
    byte[] result;
    byte[] buffer = new byte[4096];

    HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create("http://magiclampmarketing.com/sms/manage_groups.php");
    httpWebRequest2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    httpWebRequest2.Method = "GET";
    httpWebRequest2.CookieContainer = cookieContainer;
    httpWebRequest2.KeepAlive = true;
    httpWebRequest2.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11";
    httpWebRequest2.Referer = "http://magiclampmarketing.com/sms/main.php";
    httpWebRequest2.SendChunked = false;

    WebHeaderCollection myWebHeaderCollection = httpWebRequest2.Headers;
    myWebHeaderCollection.Add("Accept-Language", "en;q=0.8");
    myWebHeaderCollection.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
    myWebHeaderCollection.Add("Accept-Encoding", "gzip,deflate,sdch");

    var sp = httpWebRequest2.ServicePoint;
    var prop = sp.GetType().GetProperty("HttpBehaviour", BindingFlags.Instance | BindingFlags.NonPublic);
    prop.SetValue(sp, (byte)0, null);

    using (WebResponse response = httpWebRequest2.GetResponse())
    {
        using (Stream responseStream = response.GetResponseStream())
        {
            using (MemoryStream memoryStream = new MemoryStream())
            {
                int count = 0;
                do
                {
                    count = responseStream.Read(buffer, 0, count);
                    memoryStream.Write(buffer, 0, count);

                } while (count != 0);

                result = memoryStream.ToArray();
            }
        }
    }

    return campaigns; 
}

1 个答案:

答案 0 :(得分:2)

您使用的Chrome浏览器看起来已经登录到该网站,并且有一个会话cookie。 但是,您的代码并未突出显示如何传递会话cookie。

从看到的内容来看,您的程序中的请求似乎会返回一个响应,将您重定向到登录页面。

您必须澄清您对传递会话cookie的看法。或者接受你的编程正在做预期的事情。