Есть некоторая программа (ЕГАИС УТП), кот. позволяет с собой общаться по HTTP, при этом "задать ей вопрос" можно либо "открыв" соотв. URI и получив в ответ XML с ответом, либо за'upload'ив в нее XML с вопросами с получив в ответ XML с ответом. С первым вариантом я разобрался, а вот с XML upload беда: загрузить в нее файл у меня получается, программа факт загрузки файла отрабатывает корректно, но я никак не могу сообразить, как именно мне получить ее ответ в XML. Подскажите?
Здравствуйте, sushko, Вы писали:
S>Есть некоторая программа (ЕГАИС УТП), кот. позволяет с собой общаться по HTTP, при этом "задать ей вопрос" можно либо "открыв" соотв. URI и получив в ответ XML с ответом, либо за'upload'ив в нее XML с вопросами с получив в ответ XML с ответом. С первым вариантом я разобрался, а вот с XML upload беда: загрузить в нее файл у меня получается, программа факт загрузки файла отрабатывает корректно, но я никак не могу сообразить, как именно мне получить ее ответ в XML. Подскажите?
Ответ на POST и GET запросы читается одинаково, разница есть только при отправке данных, т.е. после pFile->Write нужно делать то же самое, что и при запросе просто по урлу (как я понимаю, это pFile->Read, конкретно на этих mfc-ишных классах это не писал, но судя по всему — именно так должно быть). Если все равно не понятно что именно делать — скажите, объясню подробнее.)
Здравствуйте, jahr, Вы писали:
J>Ответ на POST и GET запросы читается одинаково, разница есть только при отправке данных, т.е. после pFile->Write нужно делать то же самое, что и при запросе просто по урлу (как я понимаю, это pFile->Read, конкретно на этих mfc-ишных классах это не писал, но судя по всему — именно так должно быть). Если все равно не понятно что именно делать — скажите, объясню подробнее.)
Да нет, это понятно, только оно так не работает Т.е. при попытке pFile->Read() вдруг оказывается, что читать нечего. т.к. никто нам не пишет. В то же время CURL на тот же запрос возвращает вполне вменяемый XML ответа.
Здравствуйте, sushko, Вы писали:
S>Здравствуйте, jahr, Вы писали:
J>>Ответ на POST и GET запросы читается одинаково, разница есть только при отправке данных, т.е. после pFile->Write нужно делать то же самое, что и при запросе просто по урлу (как я понимаю, это pFile->Read, конкретно на этих mfc-ишных классах это не писал, но судя по всему — именно так должно быть). Если все равно не понятно что именно делать — скажите, объясню подробнее.)
S>Да нет, это понятно, только оно так не работает Т.е. при попытке pFile->Read() вдруг оказывается, что читать нечего. т.к. никто нам не пишет. В то же время CURL на тот же запрос возвращает вполне вменяемый XML ответа.
Скорее всего — при отправке данных указана неверная длина контента, тогда сервер не отвечает пока не получит того, что ему по его мнению не хватает. Длина контента указывается в соответствующем хедере. Проще всего установить какой-нибудь сниффер типа Wireshark, в котором посмотреть, что именно отправляется на сервер и сравнить с тем, что отправляет вариант с curl. Но то, что сервер не отвечает — хорошая заявка на то, что в запросе указана неверная длина данных запроса.
Re[3]: Как правильно получить ответ от HTTP-сервера?
Здравствуйте, sushko, Вы писали:
S>Да нет, это понятно, только оно так не работает Т.е. при попытке pFile->Read() вдруг оказывается, что читать нечего. т.к. никто нам не пишет. В то же время CURL на тот же запрос возвращает вполне вменяемый XML ответа.
Вот здесь ошибка :
int iUtf8Length = 0;
...
pFile->SendRequestEx(iUtf8Length-1);
Re[4]: Как правильно получить ответ от HTTP-сервера?
Здравствуйте, jahr, Вы писали:
J>Скорее всего — при отправке данных указана неверная длина контента, тогда сервер не отвечает пока не получит того, что ему по его мнению не хватает. Длина контента указывается в соответствующем хедере. Проще всего установить какой-нибудь сниффер типа Wireshark, в котором посмотреть, что именно отправляется на сервер и сравнить с тем, что отправляет вариант с curl. Но то, что сервер не отвечает — хорошая заявка на то, что в запросе указана неверная длина данных запроса.
Ага, спасибо, я проверю.
J>Вот здесь ошибка : J>int iUtf8Length = 0; J>pFile->SendRequestEx(iUtf8Length-1);
, кот. возвращает в OUT-параметре эту самую iUtf8Length. AnsiToUtf8() добавляет ноль в конец преобразованной строки, и отправлять этот ноль в HTTP просто незачем, поэтому в SendRequestEx() передается iUtf8Length-1.