2017-01-04 18 views
0

現在、ASINの数々の価格を追跡するためのC++プログラムを作成しようとしています。 Qcode(バージョン5.5)でC++を使用していて、Mac OSXでXcode(5.1.1)でコンパイルしています。 コンパイル時には実行されていますが、出力はありません。Qt(mac - OSX)を使用したAWSクエリで結果が得られません。

*QUrl("http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=///////////////&AssociateTag=/////////////&ItemId=B00181T20O&Operation=ItemLookup&ResponseGroup=OfferSummary&Service=AWSECommerceService&Signature=1K69SLmTkZ9hZwwt5ualR4uDRwY%3D&SignatureMethod=HmacSHA1&Timestamp=2017-01-04T10%3A21%3A46Z") 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
qt.network.ssl: Error receiving trust for a CA certificate 
"<?xml version=\"1.0\"?>\n<ItemLookupErrorResponse 
xmlns=\"http://ecs.amazonaws.com/doc/2005-10-05/\"><Error> 
<Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated 
does not match the signature you provided. Check your AWS Secret Access Key and 
signing method. Consult the service documentation for details.</Message></Error> 
<RequestId>f4626242-a110-43f1-9b56-b8a696b3f299</RequestId> 
</ItemLookupErrorResponse>" 

RET: 
("", "")* 

は再びそれをテストするために、私が最初に(URLをコピーした私の代わりに、次の警告メッセージが(「/////////////」として私は、プライバシー上の理由から、アクセスキー& AssociateTagを暗号化)していますいくつかの行の警告メッセージ)がブラウザに表示され、私も同じエラーが表示されます: "私たちが計算したリクエスト署名は、あなたが提供した署名と一致しません。 "

URLに何が間違っているかのヒントを教えていただけますか? ありがとうございます!

+0

基本的なコード例を教えてください。 –

+0

私に最も関連があると思われる部分を入力しようとしました(私は全体の.zipファイルを埋め込むことができません) – Starver

+0

私のA | BテストによればSignatureMethodにエラーがあるはずですが、 – Starver

答えて

0

これはコードの最も関連する部分です。 .zipファイルを埋め込むことができないと思われます。

AWSQueryRequest::AWSQueryRequest(QObject *parent) : 
    QObject(parent) 
{ 
    m_netManager = new QNetworkAccessManager(this); 
} 

QString AWSQueryRequest::hmacSha1(QByteArray key, QByteArray baseString) 
{ 
    int blockSize = 64; // HMAC-SHA-1 block size, defined in SHA-1 standard 
    if (key.length() > blockSize) 
    { 
     // if key is longer than block size (64), reduce key length with SHA-1 compression 
     key = QCryptographicHash::hash(key, QCryptographicHash::Sha1); 
    } 

    QByteArray innerPadding(blockSize, char(0x36)); // initialize inner padding with char "6" 
    QByteArray outerPadding(blockSize, char(0x5c)); // initialize outer padding with char "quot; 
    // ascii characters 0x36 ("6") and 0x5c ("quot;) are selected because they have large 
    // Hamming distance (http://en.wikipedia.org/wiki/Hamming_distance) 

    for (int i = 0; i < key.length(); i++) 
    { 
     innerPadding[i] = innerPadding[i]^key.at(i); // XOR operation between every byte in key and innerpadding, of key length 
     outerPadding[i] = outerPadding[i]^key.at(i); // XOR operation between every byte in key and outerpadding, of key length 
    } 

    // result = hash (outerPadding CONCAT hash (innerPadding CONCAT baseString)).toBase64 
    QByteArray total = outerPadding; 
    QByteArray part = innerPadding; 
    part.append(baseString); 
    total.append(QCryptographicHash::hash(part, QCryptographicHash::Sha1)); 
    QByteArray hashed = QCryptographicHash::hash(total, QCryptographicHash::Sha1); 
    return hashed.toBase64(); 
} 

QByteArray AWSQueryRequest::getTimeStamp() 
{ 
    QDateTime dateTime = QDateTime::currentDateTimeUtc(); 
    return dateTime.toString(Qt::ISODate).toUtf8(); 
} 

QByteArray AWSQueryRequest::createSignature(const QMap<QString,QString> & queryItems) 
{ 
    QUrl url(END_POINT); 
    QString stringToSign = "GET\n"; 
    stringToSign.append(url.host() + "\n"); 
    stringToSign.append(url.path() + "\n"); 

    QList<QString> keys = queryItems.keys(); 
    for(int i=0; i < keys.count() ; ++i) 
    { 
     stringToSign.append(keys[i]+"="+queryItems[keys[i]]); 
     if(i != keys.count() -1 ) 
      stringToSign.append("&"); 
    } 
    QString signature = hmacSha1(AWS_PASS, stringToSign.toUtf8()); 
    return QUrl::toPercentEncoding(signature); 
} 
#if 0 
QByteArray AWSQueryRequest::createSignature(const QList< QPair<QString,QString> > & queryItems) 
{ 
    QUrl url(END_POINT); 
    QString stringToSign = "GET\n"; 
    stringToSign.append(url.host() + "\n"); 
    stringToSign.append(url.path() + "\n"); 

    for (int i=0; i<queryItems.count(); ++i) 
    { 
     QPair<QString,QString> pairValue = queryItems[i]; 
     stringToSign.append(pairValue.first+"="+pairValue.second); 
     if(i != queryItems.count() -1) 
      stringToSign.append("&"); 
    } 

    QString signature = hmacSha1(AWS_PASS, stringToSign.toUtf8()); 
    return QUrl::toPercentEncoding(signature); 
} 
#endif 
QUrl AWSQueryRequest::createUrl(const QMap< QString,QString >& queryItems) 
{ 
    QUrl url(END_POINT); 
    QUrlQuery query; 
    QMapIterator<QString, QString> it(queryItems); 
    while (it.hasNext()) 
    { 
     it.next(); 
     query.addQueryItem(it.key().toUtf8(), it.value().toUtf8()); 
    } 
    url.setQuery(query); 
    return url; 

} 
関連する問題