2009-10-17 4 views
1

Привет, я пытаюсь сделать приложение, которое отправляет данные на страницу входа joomla, но единственное, что я верну, - это не разрешено.HttpWebRequest POST и Cookies

Function GetPage(ByVal Url As String) As String 
    Dim CookieJar As New Net.CookieContainer 
    Dim enc As Encoding = Encoding.GetEncoding(1252) 
    Dim Data As Byte() = Nothing 

    Dim PostData As String = "" 
    If InStr(Url, "?") <> 0 Then 
     PostData = Url.Substring(InStr(Url, "?")) 
     Url = Replace(Url, PostData, "") 
     Url = Url.TrimEnd("?"c) 

     Data = enc.GetBytes(PostData) 
    End If 

    Dim req As System.Net.HttpWebRequest = CType(Net.WebRequest.Create(Url), Net.HttpWebRequest) 
    req.AllowAutoRedirect = False 
    req.ContentType = "application/x-www-form-urlencoded" 
    req.Method = "POST" 
    If Not Data Is Nothing Then 
     If Data.Length > 0 Then 
      req.ContentLength = Data.Length 
      Dim newStream As Stream = req.GetRequestStream() 
      newStream.Write(Data, 0, Data.Length) 
      newStream.Flush() 
      newStream.Close() 
     End If 
    End If 

    req.CookieContainer = CookieJar 
    Dim Response As Net.HttpWebResponse = CType(req.GetResponse(), Net.HttpWebResponse) 

    Dim ResponseStream As IO.StreamReader = New IO.StreamReader(Response.GetResponseStream(), enc) 
    Dim Html As String = ResponseStream.ReadToEnd() 

    Response.Close() 
    ResponseStream.Close() 

    Return Html 
End Function 

Как мне это сделать?

ответ

5

Попробуйте установить .CookieContainer перед тем, как записать данные в .GetRequestStream()

Посмотрите этот пример:

CookieContainer cookies = new CookieContainer(); 
HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(site); 
postRequest.CookieContainer = cookies; // note this 
postRequest.Method = "POST"; 
postRequest.ContentType = "application/x-www-form-urlencoded"; 
using (Stream stream = postRequest.GetRequestStream()) 
{ 
    stream.Write(buffer, 0, buffer.Length); 
} 
+0

Nice она работала! Спасибо – JerryJ

+0

Я пытаюсь сделать то же самое (POSTing для аутентификации, получения идентификатора sessiond в cookie, запросов GET с cookie), и было бы признательно, если бы вы могли опубликовать весь код VB.Net, который вы использовали. Спасибо. – Gulbahar

+0

Похоже, что он работает для единого входа, но когда я пытаюсь получить доступ к защищенному контенту, я снова ссылаюсь на страницу входа в систему. – Shimmy

Смежные вопросы