Как отправить Http-запрос с XML данными? |
Здравствуйте, гость ( Вход | Регистрация )
Как отправить Http-запрос с XML данными? |
sindbad07 |
26.4.2011, 20:40
Сообщение
#1
|
Студент Группа: Участник Сообщений: 21 Регистрация: 28.4.2010 Пользователь №: 1671 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте форумчане. Мне надо немного поработать с Ebay API, нашел только пример на Visual Basic, мне надо типа такой функции написать, только на Qt:
Private Function SendHTTPRequest(xmldoc As DOMDocument, ByVal devID As String, ByVal appID As String, _ ByVal certID As String, ByVal version As String, ByVal callname As String, _ ByVal siteID As String, ByVal serverUrl As String) As DOMDocument 'Send the request and get the resonse document 'Create a new HTTP Request object Dim request As MSXML.XMLHTTPRequest Set request = New MSXML.XMLHTTPRequest 'add the required headers With request .open "POST", serverUrl, False .setRequestHeader "Content-Type", "text/xml" .setRequestHeader "X-EBAY-API-COMPATIBILITY-LEVEL", version .setRequestHeader "X-EBAY-API-DEV-NAME", devID .setRequestHeader "X-EBAY-API-APP-NAME", appID .setRequestHeader "X-EBAY-API-CERT-NAME", certID .setRequestHeader "X-EBAY-API-CALL-NAME", callname .setRequestHeader "X-EBAY-API-SITEID", siteID .send xmldoc End With If request.Status = 200 Then 'Successful 'set response as an XML Document Dim response As MSXML.DOMDocument Set response = request.responseXML Set SendHTTPRequest = response End If End Function Нашел в Qt пример: request.setUrl(QUrl("http://qt.nokia.com")); request.setRawHeader("User-Agent", "MyOwnBrowser 1.0"); Но возникает вопрос: а как отпавить сам XML-файл (данные) запроса? На VB после операторов ".open "POST", serverUrl, False" и ".setRequestHeader "Content-Type", "text/xml"" Идет функция ".send xmldoc" Чем заменить в Qt, подскажите кто знает. п.с. Нашел также пример на php, там используется функция setBody(), как же то-же самое задать в Qt (задать не заголовки а само тело запроса)? // Get entity of http client $httpClient = new Http_Client('http://svcs.sandbox.ebay.com/services/search/FindingService/' . FINDING_API_VERSION); // Prepare headers $httpClient->setHeaders( array( 'X-EBAY-SOA-OPERATION-NAME: findItemsByKeywords', 'X-EBAY-SOA-SECURITY-APPNAME: ' . APP_ID ) ); // Prepare body $httpClient->setBody( '<?xml version="1.0" encoding="utf-8"?> <findItemsByKeywordsRequest xmlns="http://www.ebay.com/marketplace/search/v1/services"> <keywords>' . htmlspecialchars($keywords) . '</keywords> <paginationInput> <entriesPerPage>10</entriesPerPage> </paginationInput> </findItemsByKeywordsRequest>' ); // Send request $result = $httpClient->send(); Сообщение отредактировал sindbad07 - 26.4.2011, 22:31 |
|
|
PAFOS |
27.4.2011, 8:11
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
Все просто:
Так же у класса QNetworkAccessManager есть перегруженный метод post ( const QNetworkRequest & request, QIODevice * data ) (подробности в доках), который может напрямую послать в качестве тела HTTP запроса, например, данные из файла |
|
|
sindbad07 |
27.4.2011, 10:51
Сообщение
#3
|
Студент Группа: Участник Сообщений: 21 Регистрация: 28.4.2010 Пользователь №: 1671 Спасибо сказали: 0 раз(а) Репутация: 0 |
Все просто:
Так же у класса QNetworkAccessManager есть перегруженный метод post ( const QNetworkRequest & request, QIODevice * data ) (подробности в доках), который может напрямую послать в качестве тела HTTP запроса, например, данные из файла Спасибо за такой развернутый ответ, сегодня буду пробовать На соседнем форуме предложили попробовать следующее: QNetworkReply * QNetworkAccessManager::sendCustomRequest ( const QNetworkRequest & request, const QByteArray & verb, QIODevice * data = 0 ) где const QByteArray & verb - это видимо "body" и есть? |
|
|
PAFOS |
27.4.2011, 16:30
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
Цитата QNetworkReply * QNetworkAccessManager::sendCustomRequest ( const QNetworkRequest & request, const QByteArray & verb, QIODevice * data = 0 ) verb - дополнения к заголовку HTTP data - body HTTP запроса |
|
|
Текстовая версия | Сейчас: 27.12.2024, 22:15 |