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

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
Ответить
gopstop2007
Полимат
Сообщения: 1814
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 25 раз
Поблагодарили: 10 раз

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

Сообщение 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'
Спасибо за внимание!
Последний раз редактировалось gopstop2007 29 Июнь 2025, 19:55, всего редактировалось 1 раз.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3297
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 50 раз
Контактная информация:

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

Сообщение Дед Пахом »

Осталось увидеть ваш код, который не работает.
С уважением, ДП
gopstop2007
Полимат
Сообщения: 1814
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 25 раз
Поблагодарили: 10 раз

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

Сообщение 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
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3297
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 50 раз
Контактная информация:

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

Сообщение Дед Пахом »

Первая же строчка вызывает сомнения: для http запросов класс TCurlHttpClass.
А вот это вообще повергает в ступор:

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

   curl.SetCustomRequest('POST')
    curl.SetHttpGET(TRUE)
Вы определитесь с типом запроса.
С уважением, ДП
gopstop2007
Полимат
Сообщения: 1814
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 25 раз
Поблагодарили: 10 раз

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

Сообщение gopstop2007 »

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

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

   curl.SetCustomRequest('POST')
    curl.SetHttpGET(TRUE)
Вы определитесь с типом запроса.
Спасибо большое Дед Пахом, взял по шаблону из своего кода то что работает. :D
Пошел ковырять - TCurlHttpClass, по результату отпишусь. )
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3297
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 50 раз
Контактная информация:

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

Сообщение Дед Пахом »

Не забывайте смотреть логи в DebugView, очень помогает.
С уважением, ДП
gopstop2007
Полимат
Сообщения: 1814
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 25 раз
Поблагодарили: 10 раз

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

Сообщение 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
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ответить