Vb.net 400 bad request

0

Witam.

Postanowiłem napisać prosty program do dodawania kciuków na youtube.
Według ich dokumentacji powinienem najpierw uzyskać klucz autoryzacji https://developers.google.com/youtube/2.0/developers_guide_protocol#ClientLogin_Authentication
Następnie powinienem móc dodać kciuk przez odpowiedni request.

https://developers.google.com/youtube/2.0/developers_guide_protocol#Using_community_features

Oto mój kod. Niestety zwraca mi błąd "The remote server returned an error: (400) Bad Request"

     Private Function YouTube_AddRating(ByVal DevKey As String, ByVal Auth As String, ByVal VideoID As String) As String
        System.Net.ServicePointManager.Expect100Continue = False
        Dim reader As StreamReader
        Dim Request As HttpWebRequest = HttpWebRequest.Create(String.Format("https://gdata.youtube.com/feeds/api/videos/{0}/ratings", VideoID))
        Dim PostData As New StringBuilder
        PostData.Append("<?xml version=""1.0"" encoding=""UTF-8""?>")
        PostData.Append("<entry xmlns=""http://www.w3.org/2005/Atom"" xmlns:yt=""http://gdata.youtube.com/schemas/2007"">")
        PostData.Append("<yt:rating value=""Like""/>")
        PostData.Append("</entry>")
        Request.Timeout = 20000
        Request.ContentType = "application/atom+xml; charset=UTF-8"
        Request.Host = "gdata.youtube.com"
        Request.Headers.Add("Authorization", "GoogleLogin auth=" & Auth)
        Request.Headers.Add("GData-Version", "2")
        Request.Headers.Add("X-GData-Key", "key=" & DevKey)
        Request.Method = "POST"
        Request.ContentLength = PostData.ToString.Length
        Dim requestStream As Stream = Request.GetRequestStream()
        Dim postBytes As Byte() = Encoding.ASCII.GetBytes(PostData.ToString)

        requestStream.Write(postBytes, 0, postBytes.Length)
        requestStream.Close()
        Dim Response As HttpWebResponse = Request.GetResponse()
        reader = New StreamReader(Response.GetResponseStream())
        Return reader.ReadToEnd()
 
    End Function


    Private Function YouTube_LoginToYoutube(ByVal AppName As String, ByVal Username As String, ByVal Password As String) As String
        Try
            Dim PostData As New StringBuilder
            PostData.Append("Email=" & Username)
            PostData.Append("&Passwd=" & Password)
            PostData.Append("&service=youtube")
            PostData.Append("&source=" & AppName)
            Dim reader As StreamReader
            Dim Request As HttpWebRequest = HttpWebRequest.Create("https://www.google.com/youtube/accounts/ClientLogin")
            Request.AllowAutoRedirect = True
            Request.ContentType = "application/x-www-form-urlencoded"
            Request.Method = "POST"
            Request.ContentLength = PostData.ToString.Length
            Dim requestStream As Stream = Request.GetRequestStream()
            Dim postBytes As Byte() = Encoding.ASCII.GetBytes(PostData.ToString)
            requestStream.Write(postBytes, 0, postBytes.Length)
            requestStream.Close()
            Dim Response As HttpWebResponse = Request.GetResponse()
            reader = New StreamReader(Response.GetResponseStream())
            Dim resultAuth As String = reader.ReadToEnd()
            Return Replace(Replace(Split(Split(resultAuth, "YouTubeUser")(0), "=")(1), Chr(13), ""), Chr(10), "")
        Catch ex As Exception
            Return "error"
        End Try
    End Function

Z logowaniem nie ma problemów, tylko z dodawaniem kciuków. Wiem, że google udostępnia gotową bibliotekę youtube, ale nie można tam ustawić timeout'u co jest mi potrzebne.

Z góry dziękuje za pomoc.

1

Lekko nie na temat:

Wiem, że google udostępnia gotową bibliotekę youtube, ale nie można tam ustawić timeout'u co jest mi potrzebne.

Użyj wątków do stworzenia własnego timeout-u.

0
Tezcatlipoca napisał(a)

Lekko nie na temat:

Wiem, że google udostępnia gotową bibliotekę youtube, ale nie można tam ustawić timeout'u co jest mi potrzebne.

Użyj wątków do stworzenia własnego timeout-u.

Myślałem nad tym, ale to mnie niestety nie zadowala.

Jakieś inne pomysły? Co mogę robić źle?

1 użytkowników online, w tym zalogowanych: 0, gości: 1