首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vb.net返回登录错误,登录华为Wingle e8231s -2

vb.net返回登录错误,登录华为Wingle e8231s -2
EN

Stack Overflow用户
提问于 2018-02-20 18:24:53
回答 2查看 1K关注 0票数 0

我正在尝试从win7 pc/64位,visual studio 2015,vb.net发送短信,使用华为Wingle e8231s -2 GSM Wifi Stick,

GSM Wifi Stick web界面会调用我正在尝试模仿的API。

为此,必须首先完成登录请求,header包含验证令牌和cookie(会话id),我可以通过向wingle get服务器请求来获得它们。

我总是有响应码是108006,这是错误的用户名或密码。

我的代码:

代码语言:javascript
复制
 Public Sub Main()

    Dim request As WebRequest = WebRequest.Create("http://192.168.8.1/api/webserver/SesTokInfo")
    Dim response As WebResponse = request.GetResponse()
    Dim dataStream As Stream = response.GetResponseStream()
    ' Open the stream using a StreamReader for easy access.  
    Dim reader As New StreamReader(dataStream)
    ' Read the content.  
    Dim responseFromServer As String = reader.ReadToEnd()
    ' Extract the header: cookie is the session id. 
    Dim SesStart As Short = responseFromServer.IndexOf("<SesInfo>") + 9
    Dim SesEnd As Short = responseFromServer.IndexOf("</SesInfo>")
    Dim TokStart As Short = responseFromServer.IndexOf("<TokInfo>") + 9
    Dim TokEnd As Short = responseFromServer.IndexOf("</TokInfo>")
    Dim vSessionId As String = responseFromServer.Substring(SesStart, SesEnd - SesStart)
    Dim vToken As String = responseFromServer.Substring(TokStart, TokEnd - TokStart)

    ' Clean up the streams and the response.  
    reader.Close()
    response.Close()
    'Call SetSesAndToken(response)
    'Make the api call using the session ID extracted
    request = WebRequest.Create("http://192.168.8.1/api/user/login")
    request.Headers.Add("__RequestVerificationToken", vToken)
    request.Headers.Add("Cookie", vSessionId)

    Dim PassWordEncoded As String = Convert.ToBase64String(Encoding.UTF8.GetBytes("admin"))
    Dim Myxml As String = "<?xml version:'1.0' encoding='UTF-8'?>
            <request>
            <Username>admin</Username>
            <Password>" & PassWordEncoded & "</Password>
            <password_type>4</password_type>
            </request>"

    Dim bytes As Byte() = Encoding.UTF8.GetBytes(Myxml)

    request.Method = "POST"
    request.ContentLength = bytes.Length
    request.ContentType = "text/xml"

    Using requestStream As Stream = request.GetRequestStream()
        requestStream.Write(bytes, 0, bytes.Length)
    End Using


    Dim ReceiveStream As Stream
    Dim encode As Encoding
    Dim sr As StreamReader
    Using myresponse As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
        If myresponse.StatusCode <> HttpStatusCode.OK Then
            Dim message As String = [String].Format("POST failed. Received HTTP {0}", myresponse.StatusCode)
            Throw New ApplicationException(message)
        End If
        ReceiveStream = myresponse.GetResponseStream()
        encode = System.Text.Encoding.GetEncoding("utf-8")
        sr = New StreamReader(ReceiveStream)
        responseFromServer = sr.ReadToEnd()
        MsgBox(responseFromServer)
    End Using
EN

回答 2

Stack Overflow用户

发布于 2018-02-21 00:27:12

您需要有一个cookie容器,并将您的容器与cookie保持在一起,以供后续调用。您首先执行GET来检索安全令牌和/或其他cookie,然后进行其他调用,如login等。

代码语言:javascript
复制
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    Dim FormData As String = "login_user=&wallet=0x29a450d32a95b0b08230b93cc9ac328db81dc80e"
    Dim cookiejar As New CookieContainer
    Dim webreq As HttpWebRequest = HttpWebRequest.Create("https://somesite.org")
    Dim responseReader As StreamReader
    Dim responseData As String
    Dim requestWriter As StreamWriter
    webreq.Method = HttpMethod.Get.Method

    webreq.CookieContainer = cookiejar
    Dim xxx As HttpWebResponse = webreq.GetResponse()
    responseReader = New StreamReader(webreq.GetResponse.GetResponseStream())
    responseData = responseReader.ReadToEnd()
    responseReader.Close()

    webreq = HttpWebRequest.Create("https://somesite.org")
    webreq.Accept = "text/html"
    webreq.Method = HttpMethod.Post.Method
    webreq.ContentType = "application/x-www-form-urlencoded"
    webreq.ContentLength = FormData.Length
    webreq.CookieContainer = cookiejar

    requestWriter = New StreamWriter(webreq.GetRequestStream)
    requestWriter.Write(FormData)
    requestWriter.Close()

    responseReader = New StreamReader(webreq.GetResponse.GetResponseStream())
    responseData = responseReader.ReadToEnd()
    responseReader.Close()

用于验证调制解调器的代码:

代码语言:javascript
复制
Public Sub Main()
' Hitting the starting page
Dim cookiejar As New CookieContainer
Dim request As WebRequest = WebRequest.Create("http://192.168.8.1/api/user/state-login")
request.CookieContainer = cookiejar
Dim response As WebResponse = request.GetResponse()
Dim dataStream As Stream = response.GetResponseStream()
' Open the stream using a StreamReader for easy access.  
Dim reader As New StreamReader(dataStream)
' Read the content.  
Dim responseFromServer As String = reader.ReadToEnd()
' Extract the header: cookie is the session id. 
' Dim SesStart As Short = responseFromServer.IndexOf("<SesInfo>") + 9
' Dim SesEnd As Short = responseFromServer.IndexOf("</SesInfo>")
' Dim TokStart As Short = responseFromServer.IndexOf("<TokInfo>") + 9
' Dim TokEnd As Short = responseFromServer.IndexOf("</TokInfo>")
' Dim vSessionId As String = responseFromServer.Substring(SesStart, SesEnd - SesStart)
' Dim vToken As String = responseFromServer.Substring(TokStart, TokEnd - TokStart)

' Clean up the streams and the response.  
reader.Close()
response.Close()
' Hitting the login api endpoint
'Call SetSesAndToken(response)
'Make the api call using the session ID extracted
request = WebRequest.Create("http://192.168.8.1/api/user/login")
request.CookieContainer = cookiejar

Dim PassWordEncoded As String = Convert.ToBase64String(Encoding.UTF8.GetBytes("admin"))
Dim Myxml As String = "<?xml version:'1.0' encoding='UTF-8'?>
        <request>
        <Username>admin</Username>
        <Password>" & PassWordEncoded & "</Password>
        <password_type>4</password_type>
        </request>"

Dim bytes As Byte() = Encoding.UTF8.GetBytes(Myxml)

request.Method = "POST"
request.ContentLength = bytes.Length
request.ContentType = "text/xml"

Using requestStream As Stream = request.GetRequestStream()
    requestStream.Write(bytes, 0, bytes.Length)
End Using


Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
Using myresponse As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
    If myresponse.StatusCode <> HttpStatusCode.OK Then
        Dim message As String = [String].Format("POST failed. Received HTTP {0}", myresponse.StatusCode)
        Throw New ApplicationException(message)
    End If
    ReceiveStream = myresponse.GetResponseStream()
    encode = System.Text.Encoding.GetEncoding("utf-8")
    sr = New StreamReader(ReceiveStream)
    responseFromServer = sr.ReadToEnd()
    MsgBox(responseFromServer)
End Using



void SaveUrl(string sourceURL, string savepath) {
        CookieContainer cookies = new CookieContainer();
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceURL);
        webRequest.CookieContainer = cookies;

        HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
        StreamReader responseReader = new StreamReader(response.GetResponseStream());

        string sResponseHTML = responseReader.ReadToEnd();
        using (StreamWriter sw = new StreamWriter(savepath, false)) {
            sw.Write(sResponseHTML);
        }

        string[] ImageUrl = GetImgLinks(sResponseHTML);
        foreach (string imagelink in ImageUrl) {
            HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink);
            imgRequest.CookieContainer = cookies;
            HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse();
            //Code to save image
        }
    }

试试看,我不是.net的人。祝好运!

票数 1
EN

Stack Overflow用户

发布于 2018-02-20 18:37:06

更干净的方法是为HTTP请求创建会话,而不是访问单个api端点。在这种情况下,cookies将由default.If发送,您有足够的时间,也可以浏览AT命令。祝好运!

用于验证调制解调器的代码:

代码语言:javascript
复制
Public Sub Main()
' Hitting the starting page
Dim cookiejar As New CookieContainer
Dim request As WebRequest = WebRequest.Create("http://192.168.8.1/api/user/state-login")
request.CookieContainer = cookiejar
Dim response As WebResponse = request.GetResponse()
Dim dataStream As Stream = response.GetResponseStream()
' Open the stream using a StreamReader for easy access.  
Dim reader As New StreamReader(dataStream)
' Read the content.  
Dim responseFromServer As String = reader.ReadToEnd()
' Extract the header: cookie is the session id. 
' Dim SesStart As Short = responseFromServer.IndexOf("<SesInfo>") + 9
' Dim SesEnd As Short = responseFromServer.IndexOf("</SesInfo>")
' Dim TokStart As Short = responseFromServer.IndexOf("<TokInfo>") + 9
' Dim TokEnd As Short = responseFromServer.IndexOf("</TokInfo>")
' Dim vSessionId As String = responseFromServer.Substring(SesStart, SesEnd - SesStart)
' Dim vToken As String = responseFromServer.Substring(TokStart, TokEnd - TokStart)

' Clean up the streams and the response.  
reader.Close()
response.Close()
' Hitting the login api endpoint
'Call SetSesAndToken(response)
'Make the api call using the session ID extracted
request = WebRequest.Create("http://192.168.8.1/api/user/login")
request.CookieContainer = cookiejar

Dim PassWordEncoded As String = Convert.ToBase64String(Encoding.UTF8.GetBytes("admin"))
Dim Myxml As String = "<?xml version:'1.0' encoding='UTF-8'?>
        <request>
        <Username>admin</Username>
        <Password>" & PassWordEncoded & "</Password>
        <password_type>4</password_type>
        </request>"

Dim bytes As Byte() = Encoding.UTF8.GetBytes(Myxml)

request.Method = "POST"
request.ContentLength = bytes.Length
request.ContentType = "text/xml"

Using requestStream As Stream = request.GetRequestStream()
    requestStream.Write(bytes, 0, bytes.Length)
End Using


Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
Using myresponse As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
    If myresponse.StatusCode <> HttpStatusCode.OK Then
        Dim message As String = [String].Format("POST failed. Received HTTP {0}", myresponse.StatusCode)
        Throw New ApplicationException(message)
    End If
    ReceiveStream = myresponse.GetResponseStream()
    encode = System.Text.Encoding.GetEncoding("utf-8")
    sr = New StreamReader(ReceiveStream)
    responseFromServer = sr.ReadToEnd()
    MsgBox(responseFromServer)
End Using



void SaveUrl(string sourceURL, string savepath) {
        CookieContainer cookies = new CookieContainer();
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceURL);
        webRequest.CookieContainer = cookies;

        HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
        StreamReader responseReader = new StreamReader(response.GetResponseStream());

        string sResponseHTML = responseReader.ReadToEnd();
        using (StreamWriter sw = new StreamWriter(savepath, false)) {
            sw.Write(sResponseHTML);
        }

        string[] ImageUrl = GetImgLinks(sResponseHTML);
        foreach (string imagelink in ImageUrl) {
            HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink);
            imgRequest.CookieContainer = cookies;
            HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse();
            //Code to save image
        }
    }

请测试一下,我不是.net的人。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48883013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档