[vb.net] POST data in HttpWebRequest

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Topicstarter
Mijn vraag:
Dus in een deel van mijn programma kan ik een POST doen naar mijn website voor bugs/features te melden, maar nu was ik wat aan't testen en blijkt dat niet meer werkt. Ik weet niet hoelang het niet meer werkt en ook niet hoe het komt.

Relevante software en hardware die ik gebruik: Visual Studio Community 2022

Wat ik al gevonden of geprobeerd heb:
Overal op het internet (stackoverflow/msdn/...) kom ik altijd hetzelfde tegen dus zal het wel kloppen zeker. Debuggen zowel vb zijde als php zijde maar ik geraak er niet aan uit waar het mis gaat.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
''' <summary>
    ''' Does a webrequest to the given URi
    ''' </summary>
    ''' <param name="Uri">URL</param>
    ''' <param name="sParameters"> parameters if needed</param>
    ''' <param name="UseForm">Add the parameters in a webform format</param>
    ''' <param name="sFiles">Any file to send with it (filepath \ filename)</param>
    ''' <returns>The response of the webpage or error</returns>
    Public Function Http_request(Uri As String, Optional sParameters As String = "", Optional bUseForm As Boolean = False,
                      Optional ByRef sFiles As String = "") As String
        If Not bUseForm And (sParameters <> "") And sFiles.Length = 0 Then Uri &= If(Uri.LastIndexOf("?") > 0, "&", "?") & sParameters
        Dim thePage As String = "", iReRun As Short = 1
        Do
            bTimeOut = False
            Debug.WriteLine(Date.UtcNow & ": Http_request" & If(iReRun > 1, " #" & iReRun, "") & ": " & Uri)
            Try
                ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate)
                ServicePointManager.UseNagleAlgorithm = True
                ServicePointManager.Expect100Continue = True
                ServicePointManager.CheckCertificateRevocationList = True
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
                'ServicePointManager.reuseport = True '-since .net4.6
                'ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit
                Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create(Uri), HttpWebRequest)
                With postReq
                    .Timeout = 15000
                    .ServicePoint.ConnectionLeaseTimeout = .Timeout + 5000
                    .ServicePoint.MaxIdleTime = .Timeout
                    .CookieContainer = tempCookies
                    .Referer = ""
                    .UserAgent = "Mozilla/5.0 (Windows; U; " & Environment.OSVersion.ToString & "; ru; rv:1.9.2.3)"
                    .Accept = "text/plain, text/html"
                    .ProtocolVersion = HttpVersion.Version11
                    .AllowAutoRedirect = True
                    '.Proxy 
                    .KeepAlive = False
                    If sFiles.Length = 0 Then
                        .Method = "GET"
                        If bUseForm Then
                            'Dim byteData As Byte() = encoding.GetBytes(sParameters)
                            '.ContentLength = byteData.Length
                            .ContentLength = sParameters.Length
                            .ContentType = "application/x-www-form-urlencoded"
                            .Method = "POST"
                            Using postreqstream As New StreamWriter(postReq.GetRequestStream())
                                postreqstream.Write(sParameters)
                            End Using

                            'Using postreqstream As Stream = postReq.GetRequestStream()
                            'postreqstream.Write(byteData, 0, byteData.Length)
                            'End Using
                        End If
                    Else
'when uploading files
                    End If
                End With
#Region "get the response"
        'niet relevant dit werkt
#End Region
                postReq = Nothing
                Exit Do
'nog exceptions
            Catch ex As Exception
                Debug.WriteLine("HTTP_REQUEST_Err: " & ex.Message)
                thePage = "Err: " & ex.Message
                Exit Do
            Finally
            End Try
            iReRun = CShort(iReRun + 1)
        Loop Until iReRun > 2
        bTimeOut = False
        Return thePage
    End Function


Ik roep dus een php pagina aan en dit zijn de 2 eerste regels en daar kapt ie al op af omdat er geen post data is.
PHP:
1
2
3
<?php
//necessary vars
if(isset($_POST['p']) && is_numeric($_POST['p'])){$p_id = (int) $_POST['p'];}else{print_r($_POST);die('NoProductId');}//product id


Heb de post data ook verstuurd met GET en dan komt alles mooi binnen. Dus ik vermoed dat er iets misgaat in het code stuk (lijn 45-47).
Visual Basic:
1
2
3
Using postreqstream As New StreamWriter(postReq.GetRequestStream())
                                postreqstream.Write(sParameters)
                            End Using

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag

Beste antwoord (via Damic op 08-11-2022 19:10)


  • RobIII
  • Registratie: December 2001
  • Laatst online: 17:36

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Heb je al eens gekeken of er überhaupt iets in $_POST zit? (var_dump 't desnoods). En misschien eens met iets als een Wireshark gekeken hoe (en of) het request over de lijn gaat? Verder zou ik in een debugger ook eens kijken naar wat er precies in sParameters zit en of dat wel in 't juiste formaat is en of bUseForm de waarde bevat die je denkt dat 'ie bevat.

Verder: die 73 regels code kun je plat slaan naar een regel of 5 tot 15 ofzo als je gewoon iets als Refit, RestSharp, Flurl, EasyHTTP, WebAPIClient etc. gebruikt. Maakt je leven zó veel makkelijker. En leesbaarder. Idem voor je retry-mechanisme; neem iets als Polly.

Tot slot: Hungarian notation is, ook in VB.net, anno 2022 echt niet meer nodig ;)

[ Voor 51% gewijzigd door RobIII op 07-11-2022 21:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 17:36

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Heb je al eens gekeken of er überhaupt iets in $_POST zit? (var_dump 't desnoods). En misschien eens met iets als een Wireshark gekeken hoe (en of) het request over de lijn gaat? Verder zou ik in een debugger ook eens kijken naar wat er precies in sParameters zit en of dat wel in 't juiste formaat is en of bUseForm de waarde bevat die je denkt dat 'ie bevat.

Verder: die 73 regels code kun je plat slaan naar een regel of 5 tot 15 ofzo als je gewoon iets als Refit, RestSharp, Flurl, EasyHTTP, WebAPIClient etc. gebruikt. Maakt je leven zó veel makkelijker. En leesbaarder. Idem voor je retry-mechanisme; neem iets als Polly.

Tot slot: Hungarian notation is, ook in VB.net, anno 2022 echt niet meer nodig ;)

[ Voor 51% gewijzigd door RobIII op 07-11-2022 21:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Topicstarter
@RobIII bUseform is true dus gaat erin. In de Parameters zit data in de $_POST komt leeg aan. Dus word waarschijnlijk niet mee verstuurd.

Haja wireshark, daar had ik nog niet aan gedacht.

Ik zal eens zien naar die ander stukken die je opnoemt.

Die notatie probeer ik te houden om in mijn eigen hersenpan een beetje logisch te houden.

[ Voor 9% gewijzigd door Damic op 08-11-2022 07:02 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
Je zegt dat je aan het testen was.
1. Wat is er veranderd
2. Heb je aan de code iets veranderd ? Zet dan in de TS ook eens de orginele code erbij.

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Topicstarter
@eheijnen dit is mijn originele code :+ maar in de afgelopen jaren heb ik er niets aan veranderd.

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
Wat is er dan veranderd?
Is er iets met het platform (webserver) gedaan waardoor het niet meer werkt?

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Topicstarter
Dat weet ik niet, dat probeer ik uit te zoeken. Ik ben wel van host veranderd en php versie is nu 7.4... maar $_POST zou toch altijd moeten werken is een super global tezamen met $_GET (GET werk wel).

Ben nu aan't zien of de parameters wel mee worden verstuurd.

[ Voor 69% gewijzigd door Damic op 08-11-2022 17:30 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • eheijnen
  • Registratie: Juli 2008
  • Niet online
Moet je toch eens eerst kijkenof er iets met die webserver gebeurt is of dat er een andere PHP versie opgezet is.

Is die webserver van jezelf?

Wie du mir, so ich dir.


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Topicstarter
@eheijnen is shared hosting op cloud86.

Mmmh via mijn programma krijg ik eerste een 301 en dan een 200 (Fiddler), maar als ik via browser gaan niet.

Ik gaan eens zien naar de opties van RobIII.

Edit: OMFG :F
Dus Flurl gebruikt om een post te doen en zelfde resultaat :/ maar ik zat nog steeds met die HTTP ERROR 301 (301 Moved Permanently). Na wat verder duiken zag ik dat het WWW eraf werd genepen. Maar als ik de CompanyUrl (Public const) veranderde dan veranderde het adres niet mee, tot ik wat beter keek en zag dat er een debug URL is gebruikt. Daar stond dus nog de www in.

Dan gaan kijken waarom die 301 gebeurd en kom op de site instelling terecht
Afbeeldingslocatie: https://tweakers.net/fotoalbum/image/Qvgpi3MCMtdUiTf56o4rTvnP.png
Heb het nu maar naar www gezet 8)7

Nu dus de hele http_request() maar ombouwen naar flurl :/

[ Voor 62% gewijzigd door Damic op 08-11-2022 19:10 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag

Pagina: 1