Here, I managed to login to YouTube, but I can't subscribe. I think that problem is in cookies.
Error: The remote server returned an error: (400) Bad Request.
Class Functions:
Error: The remote server returned an error: (400) Bad Request.
VB.NET:
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Web
Public Class Form1
Dim F As New Functions
Public Function GetBetween(ByRef strSource As String, ByRef strStart As String, ByRef strEnd As String, Optional ByRef startPos As Integer = 0) As String
Dim iPos As Integer, iEnd As Integer, lenStart As Integer = strStart.Length
Dim strResult As String
strResult = String.Empty
iPos = strSource.IndexOf(strStart, startPos)
iEnd = strSource.IndexOf(strEnd, iPos + lenStart)
If iPos <> -1 AndAlso iEnd <> -1 Then
strResult = strSource.Substring(iPos + lenStart, iEnd - (iPos + lenStart))
End If
Return strResult
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Source As String = F.HttpGet("https://www.google.com/accounts/ServiceLogin?uilel=3&service=youtube&passive=true&continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26nex t%3D%252F&hl=en_US<mpl=sso")
Dim DSH As String = vbNullString
DSH = GetBetween(Source, "id=" & Chr(34) & "dsh" & Chr(34), " />")
DSH = GetBetween(DSH, Chr(34), Chr(34))
Dim GALX As String = vbNullString
GALX = GetBetween(Source, "name=" & Chr(34) & "GALX" & Chr(34), " />")
GALX = GetBetween(GALX, Chr(34), Chr(34))
F.HttpPost("https://www.google.com/accounts/ServiceLoginAuth", "ltmpl=sso&pstMsg=&dnConn=&continue=http%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26nomobiletemp%3D1%26hl%3Den_US%26nex t%3D%252Findex&service=youtube&uilel=3&dsh=" + DSH + "<mpl=sso&hl=en_US<mpl=sso&timeStmp=&secTok=&GALX=" + GALX + "&Email=Username&Passwd=Password&rmShown=1&signIn=Sign+in&asts=", "application/x-www-form-urlencoded")
Dim S As String = F.HttpGet("http://www.youtube.com/user/Chuubii")
Dim Session_Token As String = GetBetween(S, "data-subscription-xsrf=" + Chr(34), "==") + "=="
'Line under this is problem...
F.HttpPost("http://www.youtube.com/subscription_ajax?action_create_subscription_to_user=1&feature=channel", "u=Chuubii&menu_type=button&session_token=" + Session_Token, "application/x-www-form-urlencoded")
End Sub
End Class
Class Functions:
VB.NET:
Imports System.Net
Imports System.IO
Imports System.Text
Public Class Functions
Dim Cookies As New CookieContainer
Public Function HttpGet(ByVal Address As String)
Dim Request As HttpWebRequest = DirectCast(WebRequest.Create(Address), HttpWebRequest)
Request.CookieContainer = Cookies
Dim Response As HttpWebResponse = DirectCast(Request.GetResponse(), HttpWebResponse)
Cookies.Add(Response.Cookies)
Dim Reader As New StreamReader(Response.GetResponseStream())
Dim Source As String = Reader.ReadToEnd
Return Source
End Function
Public Function HttpPost(ByVal Address As String, ByVal PostData As String, ByVal ContentType As String)
ServicePointManager.Expect100Continue = False
Dim Encoding As New UTF8Encoding()
Dim Bytes As Byte() = Encoding.GetBytes(PostData)
Dim Request As HttpWebRequest = DirectCast(WebRequest.Create(Address), HttpWebRequest)
Request.Method = "POST"
Request.CookieContainer = Cookies
Request.ContentType = ContentType
Request.Referer = "http://www.google.com"
Request.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"
Request.ContentLength = Bytes.Length
Dim RequestStream As Stream = Request.GetRequestStream()
RequestStream.Write(Bytes, 0, Bytes.Length)
RequestStream.Close()
Dim Response As HttpWebResponse
Response = DirectCast(Request.GetResponse(), HttpWebResponse)
Cookies.Add(Response.Cookies)
Dim RequestReader As New StreamReader(Response.GetResponseStream)
Dim Source As String = RequestReader.ReadToEnd
Return Source
End Function
End Class