2012-12-27 73 views
1

我正在与下面的代码Get请求:HttpWebRequest的在C#

  TheRequest = (HttpWebRequest)WebRequest.Create(aURL); 
      TheRequest.Method   = "GET"; 
      TheRequest.CookieContainer = TheCookies; 
    TheRequest.UserAgent   = GetUserAgent(); 
    TheRequest.KeepAlive   = false; 
    TheRequest.Timeout  = 20000; 
      TheRequest.ReadWriteTimeout = 20000; 
    TheRequest.AllowAutoRedirect = true; 
    TheRequest.Headers.Add("Accept-Language", "en-us"); 
      TheResponse = (HttpWebResponse)TheRequest.GetResponse(); 
      TheResponseString = new StreamReader(TheResponse.GetResponseStream(), Encoding.ASCII).ReadToEnd(); 

在此之后我把饼干如下:

string theCookieHeader = TheResponse.Headers[HttpResponseHeader.SetCookie]; 

然后我处理字符串是正确的cookie格式并将其放入cookie容器中以在下次POST请求中提供。从响应字符串(TheResponseString)我创建适当的发布数据和来自cookiecontainer的cookie。

我对POST请求的代码如下:

    TheRequest = (HttpWebRequest)WebRequest.Create(aURL); 
        TheRequest.Method   = "POST"; 
        TheRequest.CookieContainer = TheCookies; 
      TheRequest.UserAgent  = GetUserAgent(); 
      TheRequest.KeepAlive  = false;   
        TheRequest.Timeout    = 20000; 
        TheRequest.ReadWriteTimeout = 20000; 
      TheRequest.AllowAutoRedirect = true; 
      TheRequest.ContentType  = "application/x-www-form-urlencoded"; 
      TheRequest.Headers.Add("Accept-Language", "en-us"); 
        byte[] bytes = Encoding.ASCII.GetBytes(aPostDataString); 
      TheRequest.ContentLength = bytes.Length; 
      Stream oStreamOut = TheRequest.GetRequestStream(); 
      oStreamOut.Write(bytes,0,bytes.Length); 
      oStreamOut.Close(); 

        TheResponse = (HttpWebResponse)TheRequest.GetResponse(); 

        TheResponseString = new StreamReader(TheResponse.GetResponseStream(),       Encoding.ASCII).ReadToEnd(); 

现在的问题是我有两个网站,他们是合作伙伴的网站,他们完全有相同的东西(这似乎但是如果你怀疑任何东西,那么请告诉我),但对于一个网站,它工作正常,而对于其他网站,它给出了网站错误页面的响应字符串。

请帮我看看诊断问题。

+0

你需要为第二个提供不同的cookie,它发生在我身上!即使是相同的网站,但不同的子域名,有时你需要提供不同的cookie –

+4

那么,如果你得到一个错误,你应该看看网站上的日志失败...你应该能够看到*为什么*你得到一个错误。 –

+0

@JonSkeet我想他试图连接到无法访问的网站,btw关于李请求:)我已经安装了SkeetNotifier,它太可爱了! –

回答

0

我有类似的问题。尝试从请求中保存cookie,当您得到答复或更好的时候,将此代码放在finally区块中。为TheRequest.Host运行一次,第二次为第二个站点的主机运行。另外看看你是否需要http或https

foreach (Cookie c in TheRequest.CookieContainer.GetCookies(new Uri("http://" + TheRequest.Host))) 
{ 
    TheCookies.SetCookies(new Uri("http://" + TheRequest.Host), c.Name + "=" + c.Value); 
} 
+0

我不知道为什么,但TheRequest.CookieContainer.GetCookies(新的URI( “HTTP://” + TheRequest.Host))不返回任何cookie的 – user1871770

+0

@ user1871770是U确保它的HTTP和HTTPS不是?你是否试图用提琴手来跟踪请求? – VladL

+0

是的,我做了,因为在我的问题中,我有两个阶段,你能告诉我在哪里放置代码或尝试你告诉的事情。我有饼干容器作为类级别的对象。 – user1871770