Страница 1 из 1

urlencode - как реализовать?

Добавлено: 29 Июнь 2025, 19:50
gopstop2007
Добрый день,
Не нашел, нужна помощь.
API - endpoint, отсылается ключ (key), который проверяется на валидность, ответ - "status":"error" или "status":"succes"
Как правильно показать параметр - 'key=123456789&action=check_license' ?
При отправке как указано ниже (один из вариантов) заходит, но не передает параметр, из-за чего результат - "status":"error"
Spoiler
host = 'https://mysite.com/check.php'
postparams = 'key=123456789&action=check_license'

curl.Init()
curl.AddHttpHeader('Content-Type: application/x-www-form-urlencoded') !- or 'Content-Type: text/json'
curl.AddHttpHeader('Accept-Charset: utf-8')
curl.SetHttpHeaders()
curl.SetCustomRequest('POST')
curl.SetHttpGET(TRUE)

curl.SetSSLVerifyHost(false) ! do not verify host name
curl.SetSSLVerifyPeer(FALSE) ! verify peer

res = curl.SendRequestStr(host, postparams, respBuffer)

Код на curl который работает

Код: Выделить всё

curl -d "key=123456789&action=check_license" -X POST https://mysite.com/check.php -H 'Content-Type: application/x-www-form-urlencoded'
Код который выдал Postman, тоже рабочий

Код: Выделить всё

curl --location 'https://mysite.com/check.php' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'key=123456789' \
--data-urlencode 'action=check_license'
Спасибо за внимание!

urlencode - как реализовать?

Добавлено: 29 Июнь 2025, 19:55
Дед Пахом
Осталось увидеть ваш код, который не работает.

urlencode - как реализовать?

Добавлено: 29 Июнь 2025, 20:05
gopstop2007
Дед Пахом писал(а): 29 Июнь 2025, 19:55 Осталось увидеть ваш код, который не работает.

Код: Выделить всё

curl        TCurlClass
host        STRING(1024)
postparams  STRING(1024)
res         CURLcode, AUTO
respBuffer          STRING(32768), AUTO !big enuff to hold received response

jsonFactory cJSONFactory
root        &cJSON
item        &cJSON
jsonstr     STRING(1024), AUTO
cvt                 cstr

Код: Выделить всё

! проверка ключа
    host = 'https://mysite.com/check.php'
    postparams = 'key="' & CLIP(xKey_) & '"&action=check_license'

    curl.Init()
    curl.AddHttpHeader('Content-Type: application/x-www-form-urlencoded')  !- or 'Content-Type: text/json'            
    curl.AddHttpHeader('Accept-Charset: utf-8')
    curl.SetHttpHeaders()
    curl.SetCustomRequest('POST')
    curl.SetHttpGET(TRUE)

    curl.SetSSLVerifyHost(false)  ! do not verify host name
    curl.SetSSLVerifyPeer(FALSE)   ! verify peer

    res = curl.SendRequestStr(host, postparams, respBuffer)
    IF res = CURLE_OK
       xRCode# = curl.GetResponseCode()   ! Получить код ответа сервиса на запрос
        IF xRCode# <> 200 THEN Message('Error: '& xRCode#) END
        jsonFactory.codePage = CP_ACP    !- convert utf8 to ascii
        root &= jsonFactory.Parse(respBuffer)
        IF root &= NULL
            !error
            MESSAGE('Syntax error near: '& jsonFactory.GetError() &'|at position '& jsonFactory.GetErrorPosition())
            RETURN 0
        END
        MESSAGE(root.ToString(),'valid_until')
        
        root.Delete()
    ELSIF res = -1 
        MESSAGE('Cannot open local file', 'libcurl', ICON:Exclamation)
    ELSE
        MESSAGE('SendRequest failed: '& curl.StrError(res), 'libcurl', ICON:Exclamation)
    END

urlencode - как реализовать?

Добавлено: 29 Июнь 2025, 20:09
Дед Пахом
Первая же строчка вызывает сомнения: для http запросов класс TCurlHttpClass.
А вот это вообще повергает в ступор:

Код: Выделить всё

   curl.SetCustomRequest('POST')
    curl.SetHttpGET(TRUE)
Вы определитесь с типом запроса.

urlencode - как реализовать?

Добавлено: 29 Июнь 2025, 20:23
gopstop2007
Дед Пахом писал(а): 29 Июнь 2025, 20:09 Первая же строчка вызывает сомнения: для http запросов класс TCurlHttpClass.
А вот это вообще повергает в ступор:

Код: Выделить всё

   curl.SetCustomRequest('POST')
    curl.SetHttpGET(TRUE)
Вы определитесь с типом запроса.
Спасибо большое Дед Пахом, взял по шаблону из своего кода то что работает. :D
Пошел ковырять - TCurlHttpClass, по результату отпишусь. )

urlencode - как реализовать?

Добавлено: 29 Июнь 2025, 20:26
Дед Пахом
Не забывайте смотреть логи в DebugView, очень помогает.

urlencode - как реализовать?

Добавлено: 29 Июнь 2025, 20:50
gopstop2007
Спасибо еще раз Деду Пахому! Работает )

Код: Выделить всё

curl                          TCurlHttpClass
host                          STRING('https://mysite.com/check.php')
postfields                    STRING(1024)
rc                            CURLcode, AUTO
response                      STRING(256), AUTO

Код: Выделить всё

   curl.Init()
    postfields = 'key=' & CLIP(xKey_) & '&action=check_license'
    curl.AddHttpHeader('Content-Type: application/x-www-form-urlencoded')  !- or 'Content-Type: text/json'            
    curl.AddHttpHeader('Accept-Charset: utf-8')
    curl.SetHttpHeaders()
  
    curl.SetCustomRequest('POST')

    curl.SetSSLVerifyPeer(FALSE)
    curl.SetSSLVerifyHost(FALSE)

    rc = curl.SendRequestStr(host, postfields, response)
    IF rc = CURLE_OK
        MESSAGE('Response: '& CLIP(response), 'Test', ICON:Asterisk)
    ELSE
        MESSAGE('Fail: '& curl.StrError(rc), 'Test', ICON:Exclamation)
    END