我正试图通过这样连接到亚马逊,只返回一条数据:
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();
}
}
}
我得到了下面的异常。
{"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。
有人知道他们是否有更受支持和新的东西吗?
1条答案
按热度按时间monwx1rj1#
您是否已将id和secret更改为aws id/secret?