2013-08-20 3 views
0

Je suis en train d'utiliser l'API reposant MTurk et POST createHIT avec un HITTypeID, cependant, je reçois l'erreur suivante:Mechanical Turk rejette les requêtes POST

<?xml version="1.0"?> 
<CreateHITResponse> 
    <OperationRequest> 
    <RequestId>199c9aff-86a4-4280-8d2f-d956a53515b0</RequestId> 
    </OperationRequest> 
    <HIT> 
    <Request> 
     <IsValid>False</IsValid> 
     <Errors> 
     <Error> 
      <Code>AWS.MissingParameters</Code> 
      <Message>Your request is missing required parameters. Required parameters include Question. Question is a required parameter. (1376962818123)</Message> 
      <Data> 
      <Key>Parameter</Key> 
      <Value>Question</Value> 
      </Data> 
      <Data> 
      <Key>Description</Key> 
      <Value>Question is a required parameter</Value> 
      </Data> 
      <Data> 
      <Key>Description</Key> 
      <Value>Question is a required parameter</Value> 
      </Data> 
      <Data> 
      <Key>Parameter</Key> 
      <Value>Question</Value> 
      </Data> 
     </Error> 
     </Errors> 
    </Request> 
    </HIT> 
</CreateHITResponse> 

De ma compréhension, le titre ne devrait pas être requis si Hittype est donné. Il semble donc que l'API ne regarde pas le corps du POST.

Comment est-ce que je pourrais contourner cela? Y a-t-il un problème avec ma demande?

Demande:

<CreateHITRequest> 
    <HITTypeId>HITTYPEID</HITTypeId> 
    <MaxAssignments>1</MaxAssignments> 
    <LifetimeInSeconds>604800</LifetimeInSeconds> 
    <Question>&lt;QuestionForm Structure&gt;</Question> 
</CreateHITRequest> 

Répondre

4

Vous ne pouvez pas poster XML à Mechanical Turk sur REST. On dirait que vous confondez REST avec SOAP pour moi.

interface REST de Mechanical Turk ne prend que des paires de valeurs clés codées URL, like this:

https://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester 
&AWSAccessKeyId=[the Requester's Access Key ID] 
&Version=2012-03-25 
&Operation=CreateHIT 
&Signature=[signature for this request] 
&Timestamp=[your system's local time] 
&HITTypeId=T100CN9P324W00EXAMPLE 
&Question=[URL-encoded question data] 
&LifetimeInSeconds=604800 
+0

La documentation mentionne POSTing à l'API REST à plusieurs endroits. Cependant, cela ne couvre pas tous les détails. Comme il est mentionné dans les forums, et par le support de chat AWS. Les requêtes GET sont limitées à <8k caractères. – cxdf

+0

http://docs.aws.amazon.com/AWSMechTurk/2008-08-02/AWSMechanicalTurkRequester/MakingRequests_MakingRESTRequestsArticle.html – cxdf

+0

@ c-qjv0xfi Vous ne pouvez pas publier de code XML à moins d'utiliser SOAP. La documentation est assez claire. Vous devez encoder votre demande en URL ou utiliser SOAP. –

1

I avait mélangé les paramètres des requêtes POST. Pour l'API REST MTURK, vous ne POSTEZ pas la structure XML, mais les en-têtes + valeurs à l'URL indiquée. À la place des paramètres d'URL, vous les POSTEZ en tant que paramètres dans le corps du POST.

Par exemple, la requête GET ci-dessous:

GET https://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester &AWSAccessKeyId=[the Requester's Access Key ID] &Version=2012-03-25 &Operation=CreateHIT &Signature=[signature for this request] &Timestamp=[your system's local time] &HITTypeId=T100CN9P324W00EXAMPLE &Question=[URL-encoded question data] &LifetimeInSeconds=604800

deviendrait:

POST https://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester AWSAccessKeyId=[the Requester's Access Key ID] &Version=2012-03-25 &Operation=CreateHIT &Signature=[signature for this request] &Timestamp=[your system's local time] &HITTypeId=T100CN9P324W00EXAMPLE &Question=[URL-encoded question data] &LifetimeInSeconds=604800

où tout ci-dessous l'URL est le corps POST.

Espérons que cela aide quelqu'un.

Questions connexes