2013-08-20 7 views
0

Я пытаюсь использовать успокоительную API MTurk и POST для createHIT с HITTypeID, однако, я получаю следующее сообщение об ошибке:Mechanical Turk отвергает 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> 

Из моего понимания, название не должно быть если требуется Hittype. Таким образом, похоже, что API фактически не просматривает тело POST.

Как бы я мог обойти это? Что-то не так с моей просьбой?

Запрос:

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

ответ

4

Вы не можете XML в Mechanical Turk над REST. Похоже, вы путаете REST с SOAP для меня.

интерфейс REST механический Турка принимает только пары ключ-значение 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

В документации упоминается POSTING для REST api в нескольких местах. Однако он не охватывает его подробно. Как упоминается в форумах, а также поддержка чата AWS. Запросы GET ограничены символами <8k. – cxdf

+0

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

+0

@ c-qjv0xfi Вы не можете публиковать XML, если вы не используете SOAP. Документация достаточно ясна. Вам нужно либо URL-кодировать ваш запрос, либо использовать SOAP. –

1

я перепутаны параметры запросов POST. Для MTURK REST API вы не отправляете структуру XML, а заголовки + значения указываете на указанный URL.

Вместо параметров URL вы отправляете их как параметры в тело POST.

Например запрос GET ниже:

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

стал бы:

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

Где все ниже URL является тело POST.

Надеюсь, это поможет кому-то.

Смежные вопросы