А в лог dbgview что пишется?Игорь Столяров писал(а): ↑18 Август 2018, 16:51Всё выполняется, получаю ответ: Success, see file post_response.txt for details !
Т.е. всё хорошо, но файла post_response.txt - НЕТ. Совсем. Нигде.
libcurl for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Подскажите пожалуйста где его искать (или как его включить) ?
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
DebugView https://docs.microsoft.com/en-us/sysint ... /debugview - скачать и запустить, весь вывод через API OutputDebugString() пойдёт в него. libcurl по умолчанию фигачит туда всё, полезно для отладки.Игорь Столяров писал(а): ↑18 Август 2018, 18:38Подскажите пожалуйста где его искать (или как его включить) ?
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Спасибо. Понял.
Но ! Если посмотреть оригинальный пример PostFile - то там такая же ошибка передачи запроса,
просто "http://www.clarionlife.net/curl/index.php" возвращает всегда один и тот же ответ,
назависимо от содержания файла с запросом и вообще при его отсутствии (пустой файл test.xml).
Не передаётся запрос из файла на сервис … А нет запроса, то и нет ответа.
- 00000001 0.00000000 [3612] [libcurl] TEXT: Trying 81.177.31.8...
00000002 0.00008276 [3612] [libcurl] TEXT: TCP_NODELAY set
00000003 0.01855378 [3612] [libcurl] TEXT: Connected to npchk.nalog.ru (81.177.31. port 80 (#0)
00000004 0.01867409 [3612] [libcurl] HEADER_OUT: POST /FNSNDSCAWS_2?wsdl HTTP/1.1
00000005 0.01867409 [3612] Host: npchk.nalog.ru
00000006 0.01867409 [3612] Accept: */*
00000007 0.01867409 [3612] Content-Length: 0
00000008 0.01867409 [3612] Content-Type: application/x-www-form-urlencoded
00000009 0.01867409 [3612]
00000010 0.03757131 [3612] [libcurl] HEADER_IN: HTTP/1.1 415 Unsupported Media Type
00000011 0.03760448 [3612] [libcurl] HEADER_IN: Server: nginx/1.10.3
00000012 0.03765006 [3612] [libcurl] HEADER_IN: Date: Sat, 18 Aug 2018 17:26:19 GMT
00000013 0.03767850 [3612] [libcurl] HEADER_IN: Content-Length: 0
00000014 0.03770948 [3612] [libcurl] HEADER_IN: Connection: keep-alive
00000015 0.03773974 [3612] [libcurl] TEXT: HTTP error before end of send, stop sending
00000016 0.03779078 [3612] [libcurl] HEADER_IN:
00000017 0.03784146 [3612] [libcurl] TEXT: Curl_http_done: called premature == 0
00000018 0.03789214 [3612] [libcurl] TEXT: Closing connection 0
Но ! Если посмотреть оригинальный пример PostFile - то там такая же ошибка передачи запроса,
просто "http://www.clarionlife.net/curl/index.php" возвращает всегда один и тот же ответ,
назависимо от содержания файла с запросом и вообще при его отсутствии (пустой файл test.xml).
Не передаётся запрос из файла на сервис … А нет запроса, то и нет ответа.
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Всё-таки проблема есть и она - в LibCurl.
1. Выполняю из командной строки:
получаю адекватный ответ сервиса (как и должно быть):
2. Выполняю POSTFILE с тем же test.xml в LibCurl, прописав заголовок (и вижу в DebugView, что он установлен) и получаю ответ:
Ну тут уже явное указание сервиса на проблему: неожиданное завершение файла с запросом ...
Посмотрите пожалуйста в чём беда ? Я дальше уже ничего не могу сделать ...
1. Выполняю из командной строки:
Код: Выделить всё
curl --header "Content-Type: text/xml;charset=UTF-8" --data @test.xml http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl -o resp.xml
Код: Выделить всё
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<NdsResponse2 xmlns="http://ws.unisoft/FNSNDSCAWS2/Response" DTActFL="16.08.2018" DTActUL="16.08.2018"><NP INN="7812014560" KPP="770701001" DT="20.03.2018" State="0"/>
</NdsResponse2>
</S:Body>
</S:Envelope>
Код: Выделить всё
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"><faultcode>S:Client</faultcode>
<faultstring>Couldn't create SOAP message due to exception: XML reader error: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [1,0]
</faultstring>
</S:Fault>
</S:Body>
</S:Envelope>
Посмотрите пожалуйста в чём беда ? Я дальше уже ничего не могу сделать ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
То же и с http://www.clarionlife.net/curl/index.php - не передаётся файл в сервис (index.php), всё заканчивается на сервере, который выдаёт "HTTP/1.1 301 Moved Permanently" и возвращает html с этой ошибкой. Сервер nalog.ru не утруждает себя подобным дружелюбным поведением.Игорь Столяров писал(а): ↑18 Август 2018, 20:34Не передаётся запрос из файла на сервис
Ошибка "HTTP/1.1 415 Unsupported Media Type" хз что обозначает, может xml файл не такой? Сейчас посмотрел у них на сайте, там совсем другой xml предлагают использовать. Кстати, вот это "argname = 'userfile'" тоже вызывает сомнения -- может они ожидают другое имя.
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
С этого и надо было начинать Вам нужен совершенно другой код:
Код: Выделить всё
curl.Init()
url = 'http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl' ! ЗАМЕНИЛ
respfile = 'post_response.txt'
curl.AddHttpHeader('Content-Type: text/xml;charset=UTF-8')
curl.SetHttpHeaders()
res = curl.SendRequest(url, '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://ws.unisoft/FNSNDSCAWS2/Request"> <soapenv:Header/> <soapenv:Body> <req:NdsRequest2> <!--1 to 10000 repetitions:--> <req:NP INN="7812014560" KPP="770701001" DT="18.08.2018"/> </req:NdsRequest2> </soapenv:Body> </soapenv:Envelope>', respfile)
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Ура ! Заработало ! Спасибо. Так даже лучше, не надо создавать файл для SOAP запроса.
Сейчас ещё ответ сразу загоню через строку в XML DOM и распарсю - вообще красота будет.
В общем-то, стало немного светлее ...
Сейчас ещё ответ сразу загоню через строку в XML DOM и распарсю - вообще красота будет.
В общем-то, стало немного светлее ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
В классе TCurlHttpClass есть метод SendFile, который делает именно то что надо:
К несчастью, последняя (1.29) версия имела баг (Рафаэль как в воду глядел). Выложил v1.30, код выше теперь работает.
Код: Выделить всё
curl.Init()
url = 'http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl' ! ЗАМЕНИЛ
infile = 'test.xml'
respfile = 'post_response.txt'
res = curl.SendFile(url, infile, 'text/xml;charset=UTF-8', respfile)
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
Вообще говоря, PostFile это имитация загрузки файла на сервер с веб-страницы: есть экранное поле с именем файла, есть кнопка Submit, по которой на сервер отправляются введённые пользователем данные. Content-Type в этом случае автоматически генерируется как "application/x-www-form-urlencoded".
SendFile - это запрос с postfields - содержимым файла.
SendFile - это запрос с postfields - содержимым файла.
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
Если есть работающий скрипт curl.exe, а с libcurl не получается, запускайте "curl.exe ... ... --libcurl test.c", и в файле test.c смотрите, какие методы с какими параметрами надо вызывать.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Классно ! Спасибо. Потому, что примеров работающих скриптов в сети полно.
Эх, такую бы опцию, да сразу в исходники Clarion'а …
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Добрый день ! Созрел вопрос по существу сабжа.
Работаю с сервисом, который требует установку AGENT в запросе. Через WinInet - всё работает.
Пробую сделать запрос через CURL - получаю статус ответа, что некорректный запрос.
Их тех. поддержка говорит, что я не передаю в запросе AGENT .... Упс !
Смотрю через DEBUGVIEW и нигде не вижу установки AGENT. Так и должно быть ?
Или как можно проконтролировать, что AGENT в запросе установлен ?
Заранее спасибо за содействие ...
Работаю с сервисом, который требует установку AGENT в запросе. Через WinInet - всё работает.
Пробую сделать запрос через CURL - получаю статус ответа, что некорректный запрос.
Их тех. поддержка говорит, что я не передаю в запросе AGENT .... Упс !
Код: Выделить всё
Curl.Init()
Curl.SetSSLVersion(CURL_SSLVERSION_DEFAULT)
Curl.SetSSLVerifyHost(false)
Curl.SetSSLVerifyPeer(false)
Curl.SetOpt(CURLOPT_USERAGENT,'MY_EMAIL') ! < ---- ВОТ ЭТО НЕ ВИЖУ В DEBUGVIEW
Curl.SetOpt(CURLSSH_AUTH_AGENT,'MY_EMAIL') ! < ---- ВОТ ЭТО НЕ ВИЖУ В DEBUGVIEW
Loc:xRes = curl.SendRequest( ...
Или как можно проконтролировать, что AGENT в запросе установлен ?
Заранее спасибо за содействие ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3143
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
libcurl for Clarion
Для строк в SetOpt надо передавать переменную, а не константу:Игорь Столяров писал(а): ↑21 Август 2018, 7:56Curl.SetOpt(CURLOPT_USERAGENT,'MY_EMAIL')
Код: Выделить всё
szUserAgent CSTRING('curl/7.52.1')
CODE
SELF.SetOpt(CURLOPT_USERAGENT, szUserAgent)
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
libcurl for Clarion
Спасибо ! Пошла вода в хату …
Это меня, пиашписты ввели в заблуждение, потому, что у них синтаксис:
Код: Выделить всё
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_USERAGENT, "My User Agent" );
За теми кто отстал - не возвращаться. (С) Кодекс