WinHttp.WinHttpRequest.5.1 URL ENCODE - PullRequest
       19

WinHttp.WinHttpRequest.5.1 URL ENCODE

0 голосов
/ 07 февраля 2019

Я пытаюсь использовать API Qrickt
https://qrickit.com/qrickit_apps/qrickit_api.php

для создания QRCode для адреса Google Map в VBA.Для этого я должен отправить Http-запрос следующим образом:

"http://qrickit.com/api/qr.php?d=http://google.com/maps?q=Via+Roma,+1+Milano&qrsize=150&t=p&e=m"

Документация API гласит:

* Для неанглийских и специальных символов, URL-адрес сначала кодирует ваши данные.

Проблема в том, что мне не удается передать закодированный адрес в API.Если я передаю строку, такую ​​как «Via + Roma» или «Via% 20Roma», сгенерированный URL-адрес QRCode всегда

http://maps.google.com/maps?q=Via Roma, 1 Milano

, поэтому изображение QRCode создается, но телефон не открывается непосредственно в Google Maps..

Может ли кто-нибудь помочь мне?

Спасибо

Вот код:

Public Function f_QRCode(ByVal Address As String, ByVal Destination As String) As Boolean


On Error GoTo Err_Handler

Const ApiPath As String = "https://qrickit.com/api/qr.php?d=http://maps.google.com/maps?q="
Dim WinHttpReq As Object  '\\     Oggetto che serve al download del verbale
Dim fic As Integer
Dim buffer() As Byte
Dim URL As String



'\\ Costruisco l'URL
    URL = ApiPath + "Via%20Roma%2C%%201%20Milano" + "&qrsize=150&t=p&e=m"

    '\\ Creo l'oggetto per la connessione
   Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

   WinHttpReq.Open "POST", URL, False
   WinHttpReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

   WinHttpReq.send

   If WinHttpReq.Status = 200 Then
      fic = FreeFile
      Open Destination For Binary Lock Read Write As #fic
      buffer = WinHttpReq.responseBody
      Put #fic, , buffer

      Close #fic
      f_QRCode = True
    Else
        MsgBox "Error"
    End If




ExitHere:
   Erase buffer
   Set WinHttpReq = Nothing
   Exit Function

Err_Handler:

    Resume ExitHere

End Function

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я бы добавил, что вы можете рассмотреть возможность использования функции EncodeURL для кодирования.

Application.EncodeURL("url")
0 голосов
/ 07 февраля 2019

Их API принимает запросы GET, и вы отправляете POST.

Попробуйте:

URL = ApiPath + "Via%20Roma%2C%%201%20Milano" + "&qrsize=150&t=p&e=m"

Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

WinHttpReq.Open "GET", URL, False
WinHttpReq.send
...