API — Amazon MWS в C ++ от WinHTTP

Я пытаюсь прочитать отчеты от Amazon MWS

wchar_t szUrl[500];
swprintf_s( szUrl, sizeof(szUrl)/sizeof(szUrl[0]), L"/?AWSAccessKeyId=%s"L"&Action=GetReportRequestList"L"&Merchant=%s"L"&MWSAuthToken=%s"L"&SignatureVersion=2"L"&Timestamp=%.4d-%.2d-%.2dT%.2d%%3A%.2d%%3A%.2dZ"L"&Version=2009-01-01"L"&Signature=%s"L"&SignatureMethod=HmacSHA256"L"&MaxCount=2",
AmazonMWS::GetInstance().GetAccessKey(), AmazonMWS::GetInstance().GetSellerID(),
AmazonMWS::GetInstance().GetAuthToken(), sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond,
signature);

CString strUrl( szUrl);
strUrl.Replace( L"=", L"%3D");

Я использую WinHTTP:

m_hSession= WinHttpOpen(...
m_hConnect = WinHttpConnect( m_hSession, L"mws-eu.amazonservices.com",...
HINTERNET hRequest = WinHttpOpenRequest( m_hConnect, L"POST,(LPCWSTR)strUrl,...

Если я просто отправлю этот запрос:

WinHttpSendRequest( hRequest, NULL, 0, NULL..

Amazon возвращает файл XML с ошибкой «Должен присутствовать параметр запроса либо Действие, либо Операция».

Если я пытаюсь отправить информацию заголовка, ‘HTTP / 1.1 \ nContent-Type ….’
и интегрировать это в WinHttpSendRequest

WinHttpSendRequest( hRequest, (LPCWSTR)header, header.GetLength(), NULL, 0,....

Вызов WinHttpSendRequest завершается неудачно, и getLastError возвращает 87, использовался WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH.

Кто-нибудь из вас получил MWS для работы с WinHTTP?

Большое спасибо за вашу помощь.

Решил первый пункт. WinHTTPSendRequest очень строг по параметрам.

WinHttpSendRequest( hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, "Bla\n", 4, 4, 0);

Это работает, дополнительные данные отправляются.

WinHttpSendRequest( hRequest, L"Bla\n", 4, WINHTTP_NO_REQUEST_DATA, 0, 4, 0);

Это не работает Заголовок неизвестен / не стандартный / что угодно.

WinHttpSendRequest( hRequest, L"Content-Type: application/x-www-form-urlencoded", -1L, WINHTTP_NO_REQUEST_DATA, 0, 4, 0);

Это работает, заголовок это хорошо.

WinHttpSendRequest( hRequest, L"Content-Type: application/x-www-form-urlencoded", -1L, "Bla\n", 4, 4, 0);

Это работает, заголовок в порядке, данные отправлены. Параметр dwTotalLength, похоже, предназначен для многочастных запросов. Так что здесь только длина дополнительных данных.
Длина заголовка НЕ ​​ДОЛЖНА ДОБАВЛЯТЬСЯ.

Похоже, что WinHTTPSendRequest анализирует / анализирует заголовок. В самом деле?
Или сервер возвращает ошибку, ведущую к GetLastError () == 87?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]