VB.net Post HTTP request

Pagina: 1
Acties:
  • 1.769 views

Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
Ik probeer nu al enkele dagen om een vb6 programma om te zetten naar vb.net. Het VB6 programma gebruikt het control Winsock. Maar deze wil ik in .net niet meer gebruiken.

Ik heb een voorbeeld van wat er vestuurd moet worden in vb6, maar ik krijg het niet voor elkaar, om dit over te zetten naar vb.net voorbeeld programma

Hij stuurt eigenlijk samengevat http://192.168.1.50 HTTP/1.0 -Type: application/x-www-form-urlencoded" POST "MRELAIS1=0" naar een ipadres.

Ik kan even kijken wat de exacte data is die het oude winsock control stuurt.

De reden dat ik het oude winsock control niet wil gebruiken, is dat het control wat ik gebruik, een keer is vervangen tijdens een installatie door een andere versie. Nu kan ik de goede versie niet meer terugkrijgen, heb hem al eens gedownload van het internet en een ander pc, maar hij blijft bezig dat er geen licentie is voor het control.

Heeft er iemand toevallig een voorbeeld programma in vb.net die een HTTP POST doet naar een ip adres.

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Je had vast al gegoogled O-) maar met [google=HTTP POST vb.net] vind ik toch nog aardig wat voorbeelden. Waarom voldoen die niet dan?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
kenneth schreef op dinsdag 30 december 2008 @ 11:59:
Je had vast al gegoogled O-) maar met [google=HTTP POST vb.net] vind ik toch nog aardig wat voorbeelden. Waarom voldoen die niet dan?
het 2e zoekresultaat ben ik al heel veel tegengekomen,

Dim oWeb As New System.Net.WebClient()

oWeb.Headers.Add("Content-Type", "application/x-www-form-urlencoded")

Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes("q=InTheory")
Dim bytRetData As Byte() = oWeb.UploadData("http://www.google.com/search", "POST", bytArguments )

debug.Write(System.Text.Encoding.ASCII.GetString(bytRetData))


Maar als ik hier van de www.google.com /search 192.168.1.50 dan verzend hij wel iets, en de lampjes op het kastje knipperen ook, dat ze iets ontvangen, maar hij reageert er verder niet op.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom kijk je dan niet naar wat je binnen krijgt? Je zal op het apparaat waar je naartoe stuurt toch wel wat uitvoer zichtbaar kunnen maken? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Gimmeabrake
  • Registratie: December 2008
  • Laatst online: 23-09 23:31
Is dit geen optie?

Ik gebruik het zelf in verschillende projecten, het is ideaal als vervanging voor het vb6 winsock object. Principieel is het hetzelfde, maar het heeft meer mogelijkheden(zelf gebruik ik de eenvoudige mogelijkheid voor het versturen van serialized objects bijvoorbeeld heel veel), het is volledig in .net(c#) geschreven en het is rete-stabiel.

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Waarom zou je niet gewoon gebruiken wat het framework je biedt, ipv thirdpartyzooi te bruiken? Dat is ook volledig in .NET geschreven, retestabiel en tevens overal aanwezig waar een .NET-runtime aanwezig is ...

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Gimmeabrake
  • Registratie: December 2008
  • Laatst online: 23-09 23:31
kenneth schreef op dinsdag 30 december 2008 @ 18:58:
Waarom zou je niet gewoon gebruiken wat het framework je biedt, ipv thirdpartyzooi te bruiken? Dat is ook volledig in .NET geschreven, retestabiel en tevens overal aanwezig waar een .NET-runtime aanwezig is ...
Waarom zou je het wiel opnieuw uitvinden en daardoor de tijd verspillen die je anders zou kunnen gebruiken voor de functionaliteit van je programma? De source-code zit er ook bij, dus als er iets niet klopt, kun je het altijd nog zelf veranderen. En als je de source-code ook in je solution gebruikt, is het hele aanwezigheidsverhaal ook een non-argument, aangezien je het dan mee-compilet ;)

Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
Ik zou ook liever gebruik maken van iets wat er standaard is ingebouwd.

De winsock2007 had ik al eens geprobeerd, maar ik weet niet meer waarom ik daar niet mee ben verder gegaan, ik kan het vanvond nog eens proberen of ik de winsock.net aan de praat krijg.
Waarom kijk je dan niet naar wat je binnen krijgt? Je zal op het apparaat waar je naartoe stuurt toch wel wat uitvoer zichtbaar kunnen maken?
Ik heb op het apparaat wat ik moet aansturen ook een ledje zitten, wat ik via een post zou kunnen uitzetten,
dat probeer ik ook de hele tijd maar dat lukt dus niet.

Acties:
  • 0 Henk 'm!

  • Gimmeabrake
  • Registratie: December 2008
  • Laatst online: 23-09 23:31
Volgens mij moet je voor jou gebruik van de control eens de LegacySupport-property van het Winsock object op True zetten; dat heb je in ieder geval nodig om met HTTP-servers te communiceren. Kijk ook even uit dat je de goede control download, je hebt de Winsock2007 control en de Winsock Orcas control: de laatste is net iets nieuwer en uitgebreider.

[ Voor 2% gewijzigd door Gimmeabrake op 02-01-2009 13:14 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
Ik heb even de exacte code gekopieerd die VB6 stuurt met behulp van het originele winsock component.

POST / HTTP/1.0
Host: 192.168.1.26
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

MRELAIS1=0


Maar hoe zou dit er nu uit zien in het originele system.net.?

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09:29

TeeDee

CQB 241

Daar zou iets als (zoals al eerder aangegeven door jou) zoiets moeten staan:
Visual Basic .NET:
1
2
3
4
Dim oWeb As New System.Net.WebClient()
oWeb.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes("MRELAIS1=0")
Dim bytRetData As Byte() = oWeb.UploadData("http://192.168.1.50", "POST", bytArguments )

Of misschien is dit duidelijker (helemaal uitgekauwd):
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
Dim postdata as string = "MRELAIS1=0"
Dim data As Byte() = encoding.GetBytes(postdata)
Dim myRequest As HttpWebRequest = CType(WebRequest.Create("http://192.168.1.50"), HttpWebRequest)
myRequest.Method = "POST"
myRequest.ContentType = "application/x-www-form-urlencoded"
myRequest.ContentLength = data.Length
Dim newStream As Stream=myRequest.GetRequestStream()
' Send the data.
newStream.Write(data,0,data.Length)
newStream.Close()

Als je dan vervolgens de tip van -NMe- ook in acht neem: kijk wat je op de ontvangende partij binnenkrijgt; alleen "knipperende ledjes" en "maar dat lukt dus niet" is geen debuggen!

[ Voor 30% gewijzigd door TeeDee op 05-01-2009 22:36 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
TeeDee schreef op maandag 05 januari 2009 @ 22:31:
Daar zou iets als (zoals al eerder aangegeven door jou) zoiets moeten staan:
Visual Basic .NET:
1
2
3
4
Dim oWeb As New System.Net.WebClient()
oWeb.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
Dim bytArguments As Byte() = System.Text.Encoding.ASCII.GetBytes("MRELAIS1=0")
Dim bytRetData As Byte() = oWeb.UploadData("http://192.168.1.50", "POST", bytArguments )

Of misschien is dit duidelijker (helemaal uitgekauwd):
Visual Basic .NET:
1
2
3
4
5
6
Dim postdata as string = "MRELAIS1=0"
Dim data As Byte() = encoding.GetBytes(postdata)
Dim myRequest As HttpWebRequest = CType(WebRequest.Create("http://192.168.1.50"), HttpWebRequest)
myRequest.Method = "POST"
myRequest.ContentType = "application/x-www-form-urlencoded"
myRequest.ContentLength = data.Length

Als je dan vervolgens de tip van -NMe- ook in acht neem: kijk wat je op de ontvangende partij binnenkrijgt; alleen "knipperende ledjes" en "maar dat lukt dus niet" is geen debuggen!
Dat klopt "lukt dus niet" is geen antwoord.

Ik heb bovenstaande stukje code al verschillende keren geprobeerd, als ik het stuur krijg ik inderdaad netjes reactie terug. Dus zeg maar de site, die het apparaatje zou laten zien.

Nu heb ik op dat apparaatje een ledje gebouwd, wat ik dus moet kunnen aansturen door MRELAIS1=0 te sturen. In het vb6 programma werkt dit. Maar in .NET dus niet.

Nu ben ik dus bezig om de regel "effe.UploadData("http://192.168.1.26", "POST", bytArguments)" om te zetten naar een string. en zo erachter te komen wat hij dus exact verstuurt.


Ik heb je onderste code ook nog eens uitgeprobeerd, maar daar bleef ik steken op

Dim data As Byte() = encoding.GetBytes(postdata)
reference to a non-shared member requires an object reference.

[ Voor 5% gewijzigd door voodoo202 op 05-01-2009 22:46 ]


Acties:
  • 0 Henk 'm!

  • Gimmeabrake
  • Registratie: December 2008
  • Laatst online: 23-09 23:31
voodoo202 schreef op maandag 05 januari 2009 @ 22:39:
Ik heb je onderste code ook nog eens uitgeprobeerd, maar daar bleef ik steken op

Dim data As Byte() = encoding.GetBytes(postdata)
reference to a non-shared member requires an object reference.
Probeer dit eens:
code:
1
Dim data as Byte() = System.Text.Encoding.UTF8.GetBytes(postdata)
Natuurlijk kun je UTF8 ook vervangen, mocht je een andere codering gebruiken.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09:29

TeeDee

CQB 241

voodoo202 schreef op maandag 05 januari 2009 @ 22:39:
[...]
Ik heb je onderste code ook nog eens uitgeprobeerd, maar daar bleef ik steken op

Dim data As Byte() = encoding.GetBytes(postdata)
reference to a non-shared member requires an object reference.
Misschien Imports System.Text en Dim encoding as Encoding ergens gebruiken?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
volgens mij lig ik half te slapen.

Dim postdata As String = "MRELAIS1=0"
Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(postdata)
Dim myRequest As HttpWebRequest = CType(WebRequest.Create("http://192.168.1.26"), HttpWebRequest)
myRequest.Method = "POST"
myRequest.ContentType = "application/x-www-form-urlencoded"
myRequest.ContentLength = data.Length

Dim newStream As Stream = myRequest.GetRequestStream()
' Send the data.
newStream.Write(data, 0, data.Length)

newStream.Close()

Dat stuur ik dus maar toch geen reactie van mijn controle LED, die nu dus aan zou moeten gaan, ik krijg nu alleen een foutmelding, als ik dus nog een keer de code uitvoer in dezelfde sessie, "newstream as stream = myrequest.getrequeststream()" unable to connect.

[ Voor 34% gewijzigd door voodoo202 op 05-01-2009 23:23 ]


Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
Ik heb eens geprobeerd met WireShark,

Dit is wat de .net code nu stuurt. Hij maakt eerst een bericht met onderstaand,

POST / HTTP/1.1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Host: 192.168.1.26\r\n
Content-Length: 10
Expect: 100-continue\r\n
Connection: Keep-Alive\r\n
\r\n


wacht op een reactie. en daarna nog een bericht met onderstaand,

DATA (10 bytes)
Data: 4D52454C414953313D30



in VB6 gebeurt dit alles in 1 keer

POST / HTTP/1.0\r\n
Host: 192.168.1.26\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 10
\r\n
'Line-based text data: application/x-www-form-urlencoded
MRELAIS1=0

En daarna komt er past een antwoord. Bij beide geeft hij trouwens hetzelfde antwoord, de inhoud van de pagina.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09:29

TeeDee

CQB 241

Klopt de pagina wel?
Wat is "de inhoud"?
Is het wel de goede pagina waar je naar post?
Kloppen de hosts nu? (192.168.1.26 vs 192.168.1.50)

Ik kan me voorstellen dat je op http://192.168.1.50/ een formulier hebt staan. Dit form heeft een formaction (<form action="post.aspx" method="post">) naar "post.aspx" dan moet je in je webrequest natuurlijk wel naar http://192.168.1.50/post.aspx gaan he.

De verschillen die je ziet in de HTTP headers heeft o.a. te maken met de versie van je protocol (1.0 vs 1.1)

we beschikken niet over een glazen bol he hier... dus je zal voldoende informatie moeten geven!

[ Voor 10% gewijzigd door TeeDee op 06-01-2009 08:48 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
TeeDee schreef op dinsdag 06 januari 2009 @ 08:46:
Klopt de pagina wel?
Wat is "de inhoud"?
Is het wel de goede pagina waar je naar post?
Kloppen de hosts nu? (192.168.1.26 vs 192.168.1.50)

Ik kan me voorstellen dat je op http://192.168.1.50/ een formulier hebt staan. Dit form heeft een formaction (<form action="post.aspx" method="post">) naar "post.aspx" dan moet je in je webrequest natuurlijk wel naar http://192.168.1.50/post.aspx gaan he.

De verschillen die je ziet in de HTTP headers heeft o.a. te maken met de versie van je protocol (1.0 vs 1.1)

we beschikken niet over een glazen bol he hier... dus je zal voldoende informatie moeten geven!
Sorry voor de verwarring, maar het ip adres is 192.168.1.26. Dat .50 was het oude adres, van het apparaatje.
De pagina die ik terug krijg die klopt, de inhoud is de complete html.

De wiznet(apparaat) heeft volgens mij een buffer, die hij steeds controleert of er POST in voorkomt, en die variabele. De wiznet ontvangt nu wel de POST, maar ziet dat er geen variable in voor komt, dus stuurt hij gewoon de pagina terug, en laat het erbij.
Daarom moet de variabele en de overige gevevens in een keer gestuurd worden denk ik (aangezien vb6 dit doet) vb.net stuurt eerst wat, met aan het einde daarvan, er komt nog meer. En daarna stuurt hij nog iets.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 09:29

TeeDee

CQB 241

Dan kijk je naar de System.Net.Sockets en ga je je request (praktisch identiek aan je .zip) handmatig opbouwen.

- Welke/wat is een wiznet?
- Is er een api reference?

Nogmaals: de 'complete html' zegt mij niets. Is dat een form of moet dat een resultaat zijn nadat er een POST is uitgevoerd.

[ Voor 27% gewijzigd door TeeDee op 06-01-2009 17:02 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08 20:29
TeeDee schreef op dinsdag 06 januari 2009 @ 17:00:
Dan kijk je naar de System.Net.Sockets en ga je je request (praktisch identiek aan je .zip) handmatig opbouwen.

- Welke/wat is een wiznet?
- Is er een api reference?

Nogmaals: de 'complete html' zegt mij niets. Is dat een form of moet dat een resultaat zijn nadat er een POST is uitgevoerd.
Wiznet is het apparaat http://members.home.nl/bzijlstra/software/examples/wiz810mj.htm
Er is volgens mij geen api reference.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-09 21:37

Creepy

Tactical Espionage Splatterer

Een POST request doen is echt zo moeilijk niet en je kan zo kant en klare werkende code ervoor vinden. Gezien de link die je geeft zou een normale POST request moeten werken want dat is precies wat een browser ook doet. Als het vanuit je browser wel werkt maar via je eigen code niet dan weet je denk ik al waar de fout ligt ;)

Anyway. Probeer nu eerst eens een werkend formulier na te doen vanuit je code en van daaruit door te gaan. Dit topic loopt op dit moment uit in een vragen topic voor jou en je hoopt direct op antwoord. We vragen hier net iets meer inzet door aan te geven wat je zelf nog hebt geprobeerd, wat daar niet mee lukte etc.. Probeer jezelf nog iets meer in de materie te verdiepen. Mocht je er dan echt niet uitkomen dan kan je een nieuw topic open maar let dan aub wel op Het algemeen beleid #topicplaatsen in het algemeen en PRG Beleid in het bijzonder.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.