VB.NET and Facebook Photo Upload -- Getting 400 Bad Request - vb.net

Holy wow I've tried everything from writing my own headers to converting C# examples and I still can't get past the 400 Bad Request error when uploading a photo.
I have every possible permission added and my token is correct.
I can post status updates to my feed, I just can't get images uploaded. Here are two different approaches I tried, and both give me 400 Bad Request...
1
Dim myReq As HttpWebRequest
Dim myRes As HttpWebResponse
Dim encoding As New System.Text.ASCIIEncoding()
Dim postData As String
Dim data() As Byte
Dim sr As StreamReader
Dim imagedata As String
imagedata = File.OpenText("C:\ebay00042-1.jpg").ReadToEnd()
postData += "access_token=MY_TOKEN_HERE_29ZB51pPizthxX5lhmst3MZC7hYXQhW8ZB8e7sVVLzEaN8ZCZAzAgrzk1pisw3ZCtK5lwMMTZBUhe07xTsQvfeHosA1GFUAZDZD&message=this is a test123&source=" & imagedata 'File.ReadAllBytes(photoPath)
data = encoding.GetBytes(postData)
myReq = WebRequest.Create("https://graph.facebook.com/380406275386560/photos")
DirectCast(myReq, System.Net.HttpWebRequest).UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
myReq.Method = "POST"
myReq.ContentType = "application/x-www-form-urlencoded"
myReq.ContentLength = data.Length
Dim myStream As Stream = myReq.GetRequestStream
myStream.Write(data, 0, data.Length)
myStream.Close()
myRes = myReq.GetResponse
sr = New StreamReader(myRes.GetResponseStream)
Dim strHTML As String = sr.ReadToEnd
2, trying to create my own headers..
Dim myReq As HttpWebRequest
Dim myRes As HttpWebResponse
Dim encoding As New System.Text.ASCIIEncoding()
Dim data() As Byte
Dim sr As StreamReader
Dim boundary As String = "----------" + DateTime.Now.Ticks.ToString("x")
Dim sb As StringBuilder = New StringBuilder("")
sb.Append("----------").Append(boundary).Append("\r\n")
sb.Append("Content-Disposition: form-data; name=""access_token""").Append("\r\n")
sb.Append("\r\n")
sb.Append("MY_TOKEN_HERE_MZC7hYXQhW8ZB8e7sVVLzEaN8ZCZAzAgrzk1pisw3ZCtK5lwMMTZBUhe07xTsQvfeHosA1GFUAZDZD").Append("\r\n")
sb.Append("----------").Append(boundary).Append("\r\n")
sb.Append("Content-Disposition: form-data; name=""message""").Append("\r\n")
sb.Append("\r\n")
sb.Append("Testttt").Append("\r\n")
sb.Append("----------").Append(boundary)
sb.Append("Content-Disposition: file; name=""source"" filename=""ebay00042-1.jpg""").Append("\r\n")
sb.Append("Content-Type: image/jpeg).Append(\r\n")
'sb.Append("Content-Transfer-Encoding: binary").Append("\r\n")
sb.Append("\r\n")
sb.Append(File.OpenText("C:\ebay00042-1.jpg").ReadToEnd()).Append("\r\n")
sb.Append("----------").Append(boundary).Append("----------").Append("\r\n")
'txtCaption.Text = sb.ToString
data = encoding.GetBytes(sb.ToString)
myReq = WebRequest.Create("https://graph.facebook.com/380406275386560/photos")
DirectCast(myReq, System.Net.HttpWebRequest).UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
myReq.Method = "POST"
myReq.ContentType = "multipart/form-data; boundary=" + boundary
'myReq.ContentType = "application/x-www-form-urlencoded"
myReq.ContentLength = data.Length
Dim myStream As Stream = myReq.GetRequestStream
myStream.Write(data, 0, data.Length)
myStream.Close()
myRes = myReq.GetResponse
sr = New StreamReader(myRes.GetResponseStream)
Dim strHTML As String = sr.ReadToEnd
Any help would be greatly appreciated!

I don't know anything about Facebook's API, but if I were you I'd have a good look at http://csharpsdk.org/
If I had to send an image based on the info you provided, it would look something like this :
' Request URL, image file to send, token and result HTML buffer
Dim reqUrl As String = "https://graph.facebook.com/380406275386560/photos"
Dim imageData As Byte() = File.ReadAllBytes("C:\ebay00042-1.jpg")
Dim token As String = "MY_TOKEN_HERE"
Dim strHtml As String = ""
' Request
Dim request As WebRequest = WebRequest.Create(reqUrl)
request.Headers.Add("access_token", token)
request.Method = "POST"
' set *correct* content type
request.ContentType = "image/jpeg"
' write image data to request stream
Using str = request.GetRequestStream()
str.Write(imageData, 0, imageData.Length)
End Using
' response
Dim response As WebResponse = request.GetResponse()
' HTTP Status
Dim status As Integer = CType(response, HttpWebResponse).StatusCode
If status = 200 Then
' success
Using reader As New StreamReader(response.GetResponseStream())
strHtml = reader.ReadToEnd()
End Using
Else
' oops
End If
Hope that helps.

Related

access API on imagoxt

i must download some information from API exposed by a server, but whit information in my hand i'm very in difficult.
my code :
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
Dim address As Uri
Dim data As StringBuilder
Dim byteData() As Byte
Dim postStream As Stream = Nothing
address = New Uri("https://www.xxxxxxx.com/api/ajax/widget/refreshWidget")
request = DirectCast(WebRequest.Create(address), HttpWebRequest)
request.Method = "POST"
request.Headers("Authorization") = "Bearer " & "owvNGiOautorizzazoGDNHVGpSO2xcVzE8207JqnjNj"
request.Accept = "application/json"
request.ContentType = "multipart/form-data"
request.Host = "www.xxxxxxx.com"
request.ContentType = "application/x-www-form-urlencoded"
request.Headers.Add("userid", "238")
request.Headers.Add("usernodeid", "1036")
request.Headers.Add("dashboardid", "589")
request.Headers.Add("widgetid", "6699")
data = New StringBuilder()
'data.Append("type: " & HttpUtility.UrlEncode("datatable"))
data.Append(body) 'HttpUtility.UrlEncode(body))
byteData = UTF8Encoding.UTF8.GetBytes(data.ToString())
request.ContentLength = byteData.Length
Try
postStream = request.GetRequestStream()
postStream.Write(byteData, 0, byteData.Length)
Finally
If Not postStream Is Nothing Then postStream.Close()
End Try
Try
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
Debug.Print(reader.ReadToEnd())
Finally
If Not response Is Nothing Then response.Close()
End Try
with this code i can access to API whit no error,
but i can't receive anythings.

login to Huawei Wingle e8231s - 2 with vb.net return login error

I'm trying to send sms from win7 pc/64bit, visual studio 2015, vb.net,
using Huawei Wingle e8231s - 2 GSM Wifi Stick,
The GSM Wifi Stick web interface makes calls to API that I'm trying to mimic.
To do so, a Login request must done first, with header contains both verification token and cookie(session id), which I can get by requesting from the wingle webserver.
I always have The response code is 108006 which is incorrect username or password.
My code:
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
You need to have a cookie container and keep your container with the cookies for subsequent calls. You first do a GET to retreive the security token and/or other cookies then you make other calls like login etc.
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()
Code to Authenticate your modem:
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
}
}
Test it out I am not a .net guy. Good Luck!
The cleaner approach is to create a Session for HTTP requests instead of hitting individual api endpoints. In this case the cookies will be sent by default.If you have enough time you can explore AT commands also. Good luck!
Code to Authenticate your modem:
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
}
}
Please test it out I am not a .net guy. Good Luck!

Instagram Register HttpWebRegister

I want to make a method to create an Instagram, but I can't to figure out how to get the cookie automatically
My old method :
Function register()
Dim postData As String = "email=" & EmailBox.Text + "#gmail.com" & "&password=" & PassBox.Text & "&username=" & UserBox.Text & "&first_name=" & NameBox.Text
Dim encoding As New UTF8Encoding
Dim byteData As Byte() = encoding.GetBytes(postData)
Dim request As HttpWebRequest = DirectCast(WebRequest.Create("https://www.instagram.com/accounts/web_create_ajax/"), HttpWebRequest)
request.Method = "POST"
request.KeepAlive = True
request.Headers.Add("X-CSRFToken", "q4NBIiEDDiPwGliNk6xxxxW9IooCHm")
request.ContentType = "application/x-www-form-urlencoded"
request.Headers.Add("X-Instagram-AJAX", "1")
request.Headers.Add("X-Requested-With", "XMLHttpRequest")
request.Headers.Add("Cookie", "mid=WZWf8QALxxxxcWsM-P1hm5F; csrftoken=q4NBIiEDDixxxxZrW9IooCHm; rur=FTW; ig_vw=16; ig_pr=1; ig_vh=4")
request.Referer = "https://www.instagram.com/"
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
request.ContentLength = byteData.Length
Dim requestStream As Stream = request.GetRequestStream()
requestStream.Write(byteData, 0, byteData.Length)
requestStream.Close()
Dim responseS As HttpWebResponse
responseS = DirectCast(request.GetResponse(), HttpWebResponse)
Dim Reader As New StreamReader(responseS.GetResponseStream())
Dim thepage As String = Reader.ReadToEnd
If thepage.Contains("This username isn't available. Please try another") Then
Label6.ForeColor = Color.DarkRed
Label6.Text = UserBox.Text + "Has been fail register !!"
Else
Label6.ForeColor = Color.LightGreen
Label6.Text = UserBox.Text + "Has been successfully register !!"
End If
TextBox1.Text = thepage
End Function
How can I get the cookie automatically?
there you go. This is an sample for login in to ASP.NET MVC website. Look for Cookiejar to retreive them.
Dim tclient As HttpClient
Dim cookiejar As New CookieContainer
cookiejar = handler.CookieContainer
Dim xResponse As HttpResponseMessage = Await (tclient.GetAsync(BaseAddress & LoginUrl))
Dim xcookies As CookieCollection = cookiejar.GetCookies(New Uri(BaseAddress & LoginUrl))
For Each tCookie As Cookie In xcookies
If tCookie.Name = "__RequestVerificationToken" Then vCookie = tCookie : VerificationToken = tCookie.Value : Exit For
Next
Dim body As String = Await (xResponse.Content.ReadAsStringAsync())
Dim htdoc As New HtmlAgilityPack.HtmlDocument
htdoc.LoadHtml(body)
Dim xxdoc As HtmlNode = htdoc.GetElementbyId("loginform")
For Each xnodes As HtmlNode In xxdoc.Elements("input")
If xnodes.Attributes(0).Value = "__RequestVerificationToken" Then
FormValidationToken = xnodes.Attributes(2).Value
End If
Next

vb.net httpwebrequest to login to EmpireAvenue.com

This is driving me insane. I know I have to be close on this. My requests matches a real one as far as I can see except the cookies are a bit different. I appear to be missing the google analytics ones. Not sure if that is the issue or not. I get redirected like I am supposed to but on the redirect page it is asking me to login again. Any help is appreciated. Here is my code:
Private Function eaLogin(ByVal ticker As String, ByVal password As String)
Try
ServicePointManager.Expect100Continue = False
Dim request As HttpWebRequest = httpWebRequest.Create("http://www.empireavenue.com")
request.Credentials = CredentialCache.DefaultCredentials
request.CookieContainer = cookieJar
Dim response As HttpWebResponse = request.GetResponse()
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
reader.Close()
response.Close()
Dim session As String = ""
ServicePointManager.Expect100Continue = False
'Set the initial parameters
Dim UserID As String = ticker ' Username
Dim PWord As String = HttpUtility.UrlEncode(password) ' Password
Dim domain As String = "https://www.empireavenue.com/user/login/do"
Dim encoding As New System.Text.ASCIIEncoding
' Use the appropriate HTML field names to stuff into the post header
Dim PostData As String = _
"login_username=" & ticker & _
"&login_password=" & PWord
Dim Data() As Byte = encoding.GetBytes(PostData)
' Initialise the request
Dim LoginReq As Net.HttpWebRequest = Net.WebRequest.Create(domain) ' Login location taken from the form action
With LoginReq
.KeepAlive = True
.Method = "POST"
' Note: if the page uses a redirect if will fail
.AllowAutoRedirect = False
.ContentType = "application/x-www-form-urlencoded"
.ContentLength = Data.Length
' Set empty container
.CookieContainer = cookieJar
.Referer = "http://www.empireavenue.com/"
.UserAgent = userAgent
.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
.Host = "www.empireavenue.com"
End With
' Add the POST data
Dim SendReq As IO.Stream = LoginReq.GetRequestStream
LoginReq.Headers.Add("Accept-Language", "en-US,en;q=0.5")
LoginReq.Headers.Add("Accept-Encoding", "gzip, deflate")
SendReq.Write(Data, 0, Data.Length)
SendReq.Close()
' Obtain the response
Dim LoginRes As Net.HttpWebResponse = LoginReq.GetResponse()
' Retreive the headers from the request (e.g. the location header)
Dim Redirect As String = LoginRes.Headers("Location")
' Add any returned cookies to the cookie collection
cookieJar.Add(LoginRes.Cookies)
' Move to the redirected page as a GET request...
Dim newUrl As String = ""
If Not (Redirect Is Nothing) Then
If Redirect.StartsWith("http://") Then
newUrl = Redirect
Else
newUrl = "https://www.empireavenue.com" & Redirect
End If
LoginReq = Net.WebRequest.Create(newUrl)
With LoginReq
.KeepAlive = False
.Method = "GET"
.ContentType = "application/x-www-form-urlencoded"
.AllowAutoRedirect = True
.CookieContainer = cookieJar
End With
' Perform the navigate and output the HTML
LoginRes = LoginReq.GetResponse()
Dim sReader As IO.StreamReader = New IO.StreamReader(LoginRes.GetResponseStream)
Dim HTML As String = sReader.ReadToEnd
If HTML.Contains(ticker) Then
MessageBox.Show("yay!")
Return True
Else
MessageBox.Show("no!")
Return False
End If
Else
MessageBox.Show("no too!")
Return False
End If
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
Return False
End Try
End Function
I couldn't try it on the empirevenue because of the restrictions at work but try this:
Dim tempCookies As CookieContainer
ServicePointManager.Expect100Continue = False
Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create("https://www.empireavenue.com/user/login/do"), HttpWebRequest)
Dim postData As String = "login_username=" & ticker & "&login_password=" & PWord
Dim encoding As New UTF8Encoding
Dim byteData As Byte() = encoding.GetBytes(postData)
postReq.Method = "POST"
postReq.KeepAlive = True
postReq.CookieContainer = tempCookies
postReq.ContentType = "application/x-www-form-urlencoded"
postReq.Referer = "http://www.empireavenue.com/"
postReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1"
postReq.ContentLength = byteData.Length
Dim postreqstream As Stream = postReq.GetRequestStream()
postreqstream.Write(byteData, 0, byteData.Length)
postreqstream.Close()
Dim postresponse As HttpWebResponse
postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
tempCookies.Add(postresponse.Cookies)
logincookie = tempCookies
Dim postreqreader As New StreamReader(postresponse.GetResponseStream())
Dim thepage As String = postreqreader.ReadToEnd
Hope it will work for you

Having problems with httpost json string through vb.net

Here's my code that I am using to send as post to the specified URL.
Dim url = "http://www.abc.com/new/process"
Dim data As String = nvc.ToString
Dim postAddress = New Uri(Url)
Dim request = DirectCast(WebRequest.Create(postAddress), HttpWebRequest)
request.Method = "POST"
request.ContentType = "application/json"
Dim postByteData As Byte() = UTF8Encoding.UTF8.GetBytes(data)
request.ContentLength = postByteData.Length
Using postStream As Stream = request.GetRequestStream()
postStream.Write(postByteData, 0, postByteData.Length)
End Using
Using resp = TryCast(request.GetResponse(), HttpWebResponse)
Dim reader = New StreamReader(resp.GetResponseStream())
result.Response = reader.ReadToEnd()
End Using
Now the problem is I don't get any exception here, but the response I'm supposed to get after posting (success or error) is not coming to my end. The URL is fine, I checked it. Am I sending it the right way?
I believe the issue is that ReadToEnd method on StreamReader internally uses the Length property. This will be null if the server doesn't send a length in the http header. Try using memory stream and a buffer instead:
Dim url = "http://my.posturl.com"
Dim data As String = nvc.ToString()
Dim postAddress = New Uri(url)
Dim request As HttpWebRequest = WebRequest.Create(postAddress)
request.Method = "POST"
request.ContentType = "application/json"
Dim postByteData As Byte() = UTF8Encoding.UTF8.GetBytes(data)
request.ContentLength = postByteData.Length
Using postStream As Stream = request.GetRequestStream()
postStream.Write(postByteData, 0, postByteData.Length)
End Using
Using resp = TryCast(request.GetResponse(), HttpWebResponse)
Dim b As Byte() = Nothing
Using stream As Stream = resp.GetResponseStream()
Using ms As New MemoryStream()
Dim count As Integer = 0
Do
Dim buf As Byte() = New Byte(1023) {}
count = stream.Read(buf, 0, 1024)
ms.Write(buf, 0, count)
Loop While stream.CanRead AndAlso count > 0
b = ms.ToArray()
End Using
End Using
Console.WriteLine("Response: " + Encoding.UTF8.GetString(b))
Console.ReadLine()
End Using