连接到使用.NET亚马逊亚马逊、连接到、NET

2023-09-06 06:08:49 作者:不懂涐别瞎猜

我试图通过连接到像这回只是一块从亚马逊的数据:

i am trying to return just one piece of data from amazon by connecting to it like this:

using System;
using System.Collections.Generic;
using System.Text;
using AmazonProductAdvtApi;
using Microsoft.Web.Services3.Addressing;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Net;

namespace AmazonProductAdvtApi
{
    class HmacSample
    {
        // Note: protocol must be https for signed SOAP requests.
        const String DESTINATION    = "https://ecs.amazonaws.com/onca/soap?Service=AWSECommerceService";

        // Set your AWS Access Key ID and AWS Secret Key here.
        // You can obtain them at:
        // http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key
        const String MY_AWS_ID = "MY_SECRET"; //yes it's there in  the real code
        const String MY_AWS_SECRET = "ANOTHER_SECRET"; //yes it's there in the real code

        // Select an item you wish to inspect and provide it's ASIN here:
        const String ITEM_ID = "0345505344";

        static void Main(string[] args)
        {
            // If you are using a debugging proxy like Fiddler to capture SOAP
            // envelopes, and you get SSL Certificate warnings, uncomment the 
            // following line:
            // ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

            // Create an ItemLookup request, with ResponseGroup "Small"
            // and using the item ID provided above.
            ItemLookup itemLookup = new ItemLookup();
            itemLookup.AWSAccessKeyId = MY_AWS_ID;

            ItemLookupRequest itemLookupRequest = new ItemLookupRequest();
            itemLookupRequest.ItemId = new String[] { ITEM_ID };
            itemLookupRequest.ResponseGroup = new String[] { "Small", "AlternateVersions" };
            itemLookup.Request = new ItemLookupRequest[] { itemLookupRequest };

            // create an instance of the serivce
            AWSECommerceService api = new AWSECommerceService();

            // set the destination
            api.Destination = new Uri(DESTINATION);

            // apply the security policy, which will add the require security elements to the
            // outgoing SOAP header
            AmazonHmacAssertion amazonHmacAssertion = new AmazonHmacAssertion(MY_AWS_ID, MY_AWS_SECRET);
            api.SetPolicy(amazonHmacAssertion.Policy());

            // make the call and print the title if it succeeds
            try
            {
                ItemLookupResponse itemLookupResponse = api.ItemLookup(itemLookup);
                Item item = itemLookupResponse.Items[0].Item[0];
                System.Console.WriteLine(item.ItemAttributes.Title);
            }
            catch (Exception e)
            {

                System.Console.Error.WriteLine(e);
            }

            // we're done
            System.Console.WriteLine("HMAC sample finished. Hit Enter to terminate.");
            System.Console.ReadLine();
        }
    }
}

和我得到了以下异常。

and i am getting the following exception.

{"WSE101: An asynchronous operation raised an exception."}
"Microsoft.Web.Services3.AsynchronousOperationException: WSE101: An asynchronous operation raised an exception. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

Server stack trace: 
   at System.Net.HttpWebRequest.GetResponse()
   at Microsoft.Web.Services3.Messaging.SoapHttpTransport.Send(SoapEnvelope message, EndpointReference destination, SoapHttpChannelOptions options)
   at Microsoft.Web.Services3.Messaging.SoapHttpOutputChannel.Send(SoapEnvelope message)
   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase)
   at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData)
   at Microsoft.Web.Services3.Messaging.SoapOutputChannel.SendDelegate.EndInvoke(IAsyncResult result)
   at Microsoft.Web.Services3.Messaging.SoapOutputChannel.EndSend(IAsyncResult result)
   at Microsoft.Web.Services3.Messaging.SoapSender.EndSend(IAsyncResult result)
   at Microsoft.Web.Services3.Messaging.SoapClient.SoapClientAsyncResult.OnSendComplete(IAsyncResult result)
   --- End of inner exception stack trace ---
   at Microsoft.Web.Services3.AsyncResult.End(IAsyncResult result)
   at Microsoft.Web.Services3.Messaging.SoapClient.SendRequestResponse(String methodname, SoapEnvelope envelope)
   at Microsoft.Web.Services3.Messaging.SoapClient.SendRequestResponse(String methodname, Object obj)
   at AmazonProductAdvtApi.AWSECommerceService.ItemLookup(ItemLookup ItemLookup1) in C:\\Documents and Settings\\agordon\\My Documents\\AmazonProductAdvtApiSampleCSharpSoap\\Client\\src\\AmazonProductAdvtApi.cs:line 218
   at AmazonProductAdvtApi.HmacSample.Main(String[] args) in C:\\Documents and Settings\\agordon\\My Documents\\AmazonProductAdvtApiSampleCSharpSoap\\Sample\\src\\HmacSample.cs:line 88"

可以请您帮助解决这个问题?我不明白我在做什么错。我使用从亚马逊网站为例来获取产品信息。它从他们的产品广告API。

can you please help with this issue? i don't understand what i am doing wrong. i am using an example from amazons website to retrieve product information. its from their product advertising API.

没有人知道他们是否有一些更多的支持和新的?

does anyone know if they have something much more supported and new?

推荐答案

你改变的ID和秘密您的AWS ID /秘诀是什么?

Have you changed the id and secret to your aws id/secret?

    // Set your AWS Access Key ID and AWS Secret Key here.
    // You can obtain them at:
    // http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key
    const String MY_AWS_ID = "secret";
    const String MY_AWS_SECRET = "anothersecret";