Я пытаюсь отправить POST-запрос на сервер API LocalBitcoins, но получаю только ошибки (41 и 43), несмотря на то, что запрос GET отлично работает даже с параметрами (аргументами).
Sub initrequest()
'this is a POST request with no arguments that results in error
JsonResponse = PrivateLocalBTC("POST", "/api/notifications/mark_as_read/9b9c2b5a16a3/")
'this is a GET request, with "ads=.." parameter, that works
'JsonResponse = PrivateLocalBTC("GET", "/api/ad-get/", "ads=771318")
Debug.Print JsonResponse
End Sub
и есть подпункт HTTP-запроса:
Function PrivateLocalBTC(Method As String, endpoint As String, Optional params As String) As String
Dim NonceUnique As String
NonceUnique = CreateNonce(13)
TradeApiSite = "https://localbitcoins.com"
apikey = "..............."
secretkey = "............"
Message = NonceUnique & apikey & endpoint & params
apisign = ComputeHash_C("SHA256", Message, secretkey, "STRHEX")
If params <> "" Then urlparams = "?" & params
Url = TradeApiSite & endpoint & urlparams
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
objHTTP.Open Method, Url, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.setRequestHeader "Apiauth-Key", apikey
objHTTP.setRequestHeader "Apiauth-Nonce", NonceUnique
objHTTP.setRequestHeader "Apiauth-Signature", apisign
objHTTP.Send ("")
objHTTP.waitForResponse
PrivateLocalBTC = objHTTP.ResponseText
Set objHTTP = Nothing
End Function
Я пробовал много вариантов размещения конечной точки, nonce, apikey в теле запроса в команде .Send, urlencoding, но без положительного результата.
ComputeHash_C, CreateNonce - это отдельные функции. Код вдохновлен большой общей работой https://github.com/krijnsent/crypto_vba!
Документ API LocalBitcoins находится здесь: https://localbitcoins.com/api-docs/