【问题标题】:HttpWebRequest POST and CookiesHttpWebRequest POST 和 Cookie
【发布时间】:2011-01-04 17:46:19
【问题描述】:

您好,我正在尝试制作一个将数据发布到 joomla 登录页面的应用程序,但我得到的唯一结果是未启用 cookie。

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

我该怎么办?

【问题讨论】:

    标签: vb.net cookies joomla httpwebrequest httpwebresponse


    【解决方案1】:

    在将任何数据写入.GetRequestStream()之前尝试设置.CookieContainer

    看看这个样本:

    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);
    }
    

    【讨论】:

    • 我正在尝试做同样的事情(POST 以进行身份​​验证,在 cookie 中获取会话 ID,使用 cookie 获取查询),如果你能发布你最终得到的整个 VB.Net 代码,我将不胜感激使用。谢谢。
    • 看起来它适用于单次登录,但是当我尝试访问受保护的内容时,我再次被引用到登录页面。
    • @Shimmy,您需要保留 CookieContainer 并将其传递给您的后续调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多