使用vb.net返回登录错误登录华为Wingle e8231s-2

使用vb.net返回登录错误登录华为Wingle e8231s-2,vb.net,login,sms,httpwebrequest,huawei-mobile-services,Vb.net,Login,Sms,Httpwebrequest,Huawei Mobile Services,我正在尝试从win7 pc/64位、visual studio 2015、vb.net发送短信, 使用华为Wingle e8231s-2 GSM Wifi棒 GSM Wifi Stick web接口调用我试图模仿的API 要做到这一点,必须首先完成一个登录请求,其中头包含验证令牌和cookiesession id,我可以通过从wingle Web服务器请求来获取 我总是有响应代码是108006,这是不正确的用户名或密码 我的代码: Public Sub Main() Dim requ

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

GSM Wifi Stick web接口调用我试图模仿的API

要做到这一点,必须首先完成一个登录请求,其中头包含验证令牌和cookiesession id,我可以通过从wingle Web服务器请求来获取

我总是有响应代码是108006,这是不正确的用户名或密码

我的代码:

 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

更干净的方法是为HTTP请求创建会话,而不是访问单个api端点。在这种情况下,默认情况下会发送cookie。如果您有足够的时间,还可以浏览AT命令。祝你好运

验证调制解调器的代码:

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
        }
    }
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的人。祝你好运

您需要有一个cookie容器,并将容器与cookie一起保存,以备后续调用。您首先要获取安全令牌和/或其他cookie,然后进行其他调用,如登录等

    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()
验证调制解调器的代码:

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
        }
    }
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的人。祝你好运

谢谢,我会检查,调制解调器完全依赖于JavaScript和Ajax调用,找不到com端口进行AT调用。请举个例子好的,你能发送调制解调器登录页面的api端点签名吗,登录端点和sendsms端点?这是一个网站,提供有关调制解调器hilink web界面的全面信息。您有时间的话,我会很高兴:谢谢您的回复,调制解调器使用令牌和cookiesession id,我提取它们并将cookie和令牌作为请求的标头传递。登录的API签名:drive.google.com/open?id=1GMlZsa48j5Ps3kcf2D0JHejygc8SIPOV是另一个版本的HiLink文档,但共享cookie容器中的大部分功能。您只需在每次调用时传递容器,这样cookie就会保留在其中感谢大家的贡献但不幸的是,它不起作用,返回错误120005,这意味着缺少一个参数,这是因为令牌不在cookie中,当我将令牌添加到cookie容器之外时,它像往常一样给出了错误10008