gpt4 book ai didi

.net - 通过 HTTP POST 使用 HttpWebRequest 和 HttpWebResponse 从 .NET 进行 Django 身份验证

转载 作者:行者123 更新时间:2023-12-01 13:09:22 25 4
gpt4 key购买 nike

我正在 .NET 中创建一个应用程序,它将作为我已部署的 Django 应用程序的第二个 UI。对于某些操作,用户需要对自己进行身份验证(作为 Django 用户)。我使用了一种 super 简单的方法来做到这一点(为简单起见,没有加密凭据):-

第 1 步。我创建了一个 django View ,它通过两个 HTTP GET 参数接受用户名和密码,并将它们作为关键字参数传递给 django.contrib.auth.authenticate()。请参阅下面的代码:

    def authentication_api(request, raw_1, raw_2):        user = authenticate(username=raw_1, password=raw_2)        if user is not None:            if user.is_active:                return HttpResponse("correct", mimetype="text/plain")            else:                return HttpResponse("disabled", mimetype="text/plain")        else:            return HttpResponse("incorrect", mimetype="text/plain")

第 2 步。我在 .NET 中使用以下代码调用它。下面的 'strAuthURL' 代表一个简单的 django URL 映射到上面的 django View :

    Dim request As HttpWebRequest = CType(WebRequest.Create(strAuthURL), HttpWebRequest)    Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)    Dim reader As StreamReader = New StreamReader(response.GetResponseStream())    Dim result As String = reader.ReadToEnd()    HttpWResp.Close()

虽然它只是一个概念验证,但它完美无缺。

现在我想通过 HTTP POST 执行此操作,所以我做了以下操作:-

我创建了一个 django View ,用于使用 POST 数据进行身份验证

    def post_authentication_api(request):        if request.method == 'POST':            user = authenticate(username=request.POST['username'], password=request.POST['password'])            if user is not None:                if user.is_active:                    return HttpResponse("correct", mimetype="text/plain")                else:                    return HttpResponse("disabled", mimetype="text/plain")            else:                return HttpResponse("incorrect", mimetype="text/plain")

我已经使用 restclient 对此进行了测试,并且此 View 按预期工作。但是我无法通过下面的 .NET 代码让它工作:

    Dim request As HttpWebRequest = CType(WebRequest.Create(strAuthURL), HttpWebRequest)    request.ContentType = "application/x-www-form-urlencoded"    request.Method = "POST"    Dim encoding As New UnicodeEncoding    Dim postData As String = "username=" & m_username & "&password=" & m_password    Dim postBytes As Byte() = encoding.GetBytes(postData)    request.ContentLength = postBytes.Length    Try        Dim postStream As Stream = request.GetRequestStream()        postStream.Write(postBytes, 0, postBytes.Length)        postStream.Close()        Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)        Dim responseStream As New StreamReader(response.GetResponseStream(), UnicodeEncoding.Unicode)        result = responseStream.ReadToEnd()        response.Close()    Catch ex As Exception        MessageBox.Show(ex.ToString)    End Try

服务器给我一个 500 内部服务器错误。我的猜测是 .NET 中的 POST 请求设置不正确。所以我基本上需要一些关于如何从 .NET 发送 POST 数据调用 django View 的指导。

谢谢,厘米

最佳答案

我觉得还行。我建议使用 Wireshark 查看您的 restclient 在 header 中发送的内容,并查看您的应用程序在 header 中发送的内容。

关于.net - 通过 HTTP POST 使用 HttpWebRequest 和 HttpWebResponse 从 .NET 进行 Django 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com