如何在 vb.net 中格式化请求 webrequest 帖子?

问题描述

尝试使用以下代码向 Netatmo 发布网络请求:

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Imports System.IO
Imports System.Web
Imports System.Net
Imports System.Text


    Sub Main()

        Dim clientID as string = "???"
        Dim clientSecret as string = "???"
        Dim userName as string = "???"
        Dim passWord as string = "???"

        Dim postData As NetatmoData = New NetatmoData()

        postData.grant_type = "password"
        postData.userName = userName
        postData.passWord = passWord
        postData.clientID = clientID
        postData.clientSecret = clientSecret

        dim json as string = JsonConvert.SerializeObject(postData,Newtonsoft.Json.Formatting.Indented)

        'hs.writelog ("Test",json)

        Dim request As WebRequest = WebRequest.Create("https://api.netatmo.com/oauth2/token")
        request.Method = "POST"

        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(json)
        request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"
        request.ContentLength = byteArray.Length

        Dim dataStream As Stream = request.GetRequestStream()

        dataStream.Write(byteArray,byteArray.Length)
        dataStream.Close()

        Try
            Dim response As WebResponse = request.GetResponse()
            dataStream = response.GetResponseStream()
            Dim reader As New StreamReader(dataStream)
            Dim responseFromServer As String = reader.ReadToEnd()
            reader.Close()
            dataStream.Close()
            response.Close()
            Console.WriteLine(responseFromServer)
        Catch ex As Exception
            Console.WriteLine(ex.message)
        end try

    End Sub

    Class NetatmoData
        public grant_type as string
        public clientID as string 
        public clientSecret as string
        public userName as string
        public passWord as string
    End Class    

但是,我从 Web 服务器收到错误 400,这表明:由于某些被认为是客户端错误(例如,格式错误的请求语法),服务器无法或不会处理请求、无效的请求消息帧或欺骗性的请求路由)。

然而,以下 Python 代码运行良好:

#!/usr/bin/python
import requests,json,time,datetime
def getToken():
    payload = {'grant_type': 'password','username': userName,'password': passWord,'client_id':clientID,'client_secret': clientSecret}

    try:
        response = requests.post("http://api.netatmo.com/oauth2/token",data=payload)
        response.raise_for_status()

    except requests.exceptions.HTTPError as error:
        print(error.response.status_code,error.response.text)

    return response.json();

# Main program
clientID        = "???"
clientSecret    = "???"
userName        = "???"
passWord        = "???"

token = getToken()
print (token)

有什么建议吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)