Eine Web-API ansprechen - PHP Code verfügbar - bin aber dennoch ratlos

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von dive26.

    Eine Web-API ansprechen - PHP Code verfügbar - bin aber dennoch ratlos

    Hallo Leute,

    ich bin gerade dabei für ein kostenloses Projekt eine vorhandene API anzusprechen.
    Leider gibt es das Beispiel nur als PHP Code. Und von einer Skala von 0-100 kann ich PHP genau 0.
    Ich möchte es aber in VB.NET programmieren und die API ansprechen.

    Hier der PHP Code:

    PHP-Quellcode

    1. /** The endpoint where Authentication is handled */
    2. const AUTH_API = 'https://my.remarkable.com';
    3. /** @var Client The HTTP client */
    4. protected $client;
    5. /** @var LoggerInterface */
    6. protected $logger;
    7. /**
    8. * Exchange a website generated code against an auth token
    9. *
    10. * @link https://my.remarkable.com/generator-desktop
    11. *
    12. * @param string $code the auth code as displayed by the my.remarkable.com
    13. * @return string the bearer authentication token
    14. * @throws \Exception
    15. */
    16. public function register($code)
    17. {
    18. $device = Uuid::uuid4()->toString();
    19. $data = [
    20. 'code' => $code,
    21. 'deviceDesc' => 'desktop-windows', # we have to lie here
    22. 'deviceID' => $device
    23. ];
    24. $this->logger->info('Registering device');
    25. $response = $this->client->requestJSON(
    26. 'POST',
    27. self::AUTH_API . '/token/json/2/device/new',
    28. $data
    29. );
    30. $token = (string)$response->getBody();
    31. $this->client->setBearerToken($token);
    32. return $token;
    33. }



    Hier mein Versuch das ganze in VB.NET nachzubilden:

    VB.NET-Quellcode

    1. Public AUTH_API As String = "https://my.remarkable.com"
    2. Public Auth_API_Token As String = "https://my.remarkable.com/token/json/2/device/new"
    3. Public Client As String
    4. Public Logger As String
    5. Public Function RegisterReMarkableCode(code As String) As String
    6. Dim deviceID As String = System.Guid.NewGuid.ToString
    7. Dim Postdata As String = "{'" + code + "', 'desktop-windows', '" + deviceID + "'}"
    8. 'MsgBox(Postdata)
    9. Dim Datenbytes() As Byte = StrToByteArray(Postdata)
    10. Dim Request As WebRequest = System.Net.WebRequest.Create(Auth_API_Token)
    11. Request.Timeout = 20000
    12. Request.ContentType = "application/json"
    13. Request.ContentLength = Datenbytes.Length
    14. Request.Method = "POST"
    15. Dim RequestStream As System.IO.Stream = Request.GetRequestStream
    16. RequestStream.Write(Datenbytes, 0, Datenbytes.Length)
    17. RequestStream.Close()
    18. Dim Response As HttpWebResponse = CType(Request.GetResponse(), HttpWebResponse)
    19. Dim ResponseStream As System.IO.Stream = Response.GetResponseStream
    20. Dim ResponseString As String = New System.IO.StreamReader(ResponseStream).ReadToEnd
    21. Return ResponseString
    22. End Function


    Ich bekomme einen 400 Bad Request Fehler zurück.
    Der Fehler kann/wird am ContentType und auch an der Übergabe der Parameter liegen.
    Ich habe aber keinen blassen Schimmer wie ich die PHP-Strings/Parameter interpretieren und/oder per Webrequest übergeben soll.

    Habt Ihr Tipps oder eine Lösung für mich?
    Wie gesagt. Ich habe keine Ahnung von PHP. Webservice habe ich aber schon mal angesprochen.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dive26“ ()

    Das Problem saß tatsächlich vor dem Rechner ;) .
    Die Daten werden tatsächlich als JSON Konstrukt übergeben.
    Und zusätzlich musste ich wegen des https:// noch TLS12 aktivieren.

    Hier der Code in VB.NET:

    VB.NET-Quellcode

    1. Public Function GetDeviceToken(OnTimeCode As String) As String
    2. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    3. Dim UUID As String = System.Guid.NewGuid.ToString
    4. Dim body As String = "{
    5. 'code': '" + OnTimeCode + "',
    6. 'deviceDesc': 'desktop-windows',
    7. 'deviceID': '" + UUID + "'
    8. }"
    9. body = body.Replace("'", """")
    10. Dim data = Encoding.UTF8.GetBytes(body)
    11. Dim response As String
    12. Dim rM2Request = System.Net.HttpWebRequest.Create(DEVICE_TOKEN_URL)
    13. rM2Request.Headers.Add("useragent", "freeremarkabletools.com")
    14. rM2Request.ContentLength = data.Length
    15. rM2Request.ContentType = "application/json"
    16. rM2Request.Method = "POST"
    17. Using requestStream = rM2Request.GetRequestStream
    18. requestStream.Write(data, 0, data.Length)
    19. requestStream.Close()
    20. Using responseStream = rM2Request.GetResponse.GetResponseStream
    21. Using reader As New StreamReader(responseStream)
    22. response = reader.ReadToEnd()
    23. End Using
    24. End Using
    25. End Using
    26. Return response
    27. End Function
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at