2014-11-17 5 views
0

Я построил приложение C# около 8 месяцев назад, чтобы вытащить ответы SurveyMonkey и сохранить их на нашем SQL Server. Приложение работает каждый день более 6 месяцев без каких-либо проблем, но внезапно утром в пятницу я не могу получить никаких запросов. Я ничего не вижу на сайте разработчика, говоря об отключении, поэтому я изучил свой код для возможных проблем.SurveyMonkey API - токен авторизации не найден

Это первое приложение, которое я когда-либо писал для создания веб-запросов, поэтому возможно, что я делаю что-то плохо.

Запрос от Скрипач:

POST https://api.surveymonkey.net/v2/surveys/get_survey_list?api_key=<key hidden> HTTP/1.1 
Authorization: bearer <token hidden> 
Content-Type: application/json 
Host: api.surveymonkey.net 
Content-Length: 146 
Expect: 100-continue 
Connection: Keep-Alive 

{ 
"page": 1, 
"fields": ["title","analysis_url","preview_url","date_created","date_modified","language_id","question_count","num_responses"] 
} 

тело Ответ от Скрипач:

{"status":1,"errmsg":"Request header \"Authorization\" token not found"} 

C# код:

private JObject SubmitPostRequest(string URIPath, string RequestBody) 
{ 
    using (var webClient = new WebClient()) 
    { 
     // Create URI for POST request to go to. URI varies depending on API method and includes API Key. 
     Uri requestURI = new Uri(APIHost, URIPath + "?api_key=" + APIKey); 

     // Have web client use NT credentials for proxy server 
     webClient.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials; 

     // Specify headers: access token in authorization header, content type 
     webClient.Headers["Authorization"] = "bearer " + AccessToken; 
     webClient.Headers["Content-Type"] = "application/json"; 

     // Create requestBody as byte[] 
     byte[] requestBody = Encoding.Default.GetBytes(RequestBody); 

     // Connect to the URI and send requestBody as a POST command. 
     byte[] postResponse = webClient.UploadData(requestURI, "POST", requestBody); 

     // Update LastConnect 
     LastConnect = DateTime.Now; 

     ++TransactionCounter; 

     // Convert byte[] response to string, parse string and return as JObject. 
     JObject jsonResponse = JObject.Parse(Encoding.Default.GetString(postResponse)); 

     // Evaluate "status" field of jsonResponse. Throw exception if response is not 0. 
     dynamic dyn = jsonResponse; 
     if (dyn.status != 0) 
     { 
      StringBuilder sb = new StringBuilder(); 
      sb.AppendLine("HTTP Post request failed:"); 
      sb.Append("\tstatus: ").AppendLine(dyn.status.ToString()); 
      sb.Append("\terrmsg: ").AppendLine(dyn.errmsg.ToString()); 
      throw new WebException(sb.ToString()); 
     } 

     return jsonResponse; 
    } 
} 
+0

Какая ошибка указывает ваше сообщение? Нет смысла задавать вопрос, если у вас этого нет. Вы уверены, что не обновили свой API? Когда вы в последний раз вносили изменения в свое приложение? Если вы внесли изменения, что произойдет, когда вы вернетесь к предыдущей версии? Вы связались с Survey Monkey, чтобы узнать, внесли ли они какие-либо изменения? – user1666620

+0

Ошибка «Локатор авторизации не найден», и это происходит в любое время, когда выполняется запрос. Если они внесли изменения в API, они еще не опубликовали никаких обновлений на сайте разработчика (https://developer.surveymonkey.com/). Приложение работает каждый день, и последнее успешно прошло раннее AM в четверг, 11/14/2014. Никакие изменения в код не были сделаны в течение нескольких месяцев. Я не связался с Survey Monkey напрямую, так как они просят вас отправить сообщение в StackOverflow, прежде чем обращаться к ним. –

+1

Я могу вам сказать, что на стороне SurveyMonkey ничего не изменилось, и ни у кого другого нет этих ошибок. Я подозреваю, что на вашем конце что-то изменилось, что убирает заголовки. Можете ли вы сбросить данные заголовка, отправляемые в SurveyMonkey? –

ответ

0

Потребовалось некоторое время, но мне удалось войти в контакт с кем-то из корпоративных ИТ, которые отслеживали трафик, чтобы узнать, что происходит. Они внедрили исправление на прокси-сервер, и все, наконец, снова работает.