Я пытаюсь прочитать отчеты от 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?
Задача ещё не решена.
Других решений пока нет …