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 ответов

Другие вопросы по тегам