vamsi2710 Ответов: 1

Ошибка при создании посмотреть на мой календарь через календарь Google API-интерфейс - неверный запрос


Я пытаюсь создать часы для своего календаря с помощью Google Calendar API...однако, когда я пытаюсь создать его, возникает исключение: "удаленный сервер вернул ошибку: (400) плохой запрос."

Что я уже пробовал:

HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/calendar/v3/calendars/floristpanel@gmail.com/events/watch");
request1.Method = "POST";

request1.Headers.Add("Authorization", "Bearer " + accesstoken);
request1.ContentType = "application/json";

string postData1 = "type=web_hook&id=01234567-89ab-cdef-0123456789ab&address=https://www.hanafloralpos.com/notification.aspx";
byte[] bytes1 = Encoding.UTF8.GetBytes(postData1);
request1.ContentLength = bytes1.Length;

Stream requestStream1 = request1.GetRequestStream();
requestStream1.Write(bytes1, 0, bytes1.Length);

WebResponse response1 = request1.GetResponse();
Stream stream1 = response1.GetResponseStream();
StreamReader reader1 = new StreamReader(stream1);

var result1 = reader1.ReadToEnd();
stream1.Dispose();
reader1.Dispose();

1 Ответов

Рейтинг:
0

Graeme_Grant

Я работаю с API Google Drive, но принцип тот же.

Вам нужно смотреть не только на код состояния, но и на возвращаемые данные ответа. Вот пример такого Плохой (Google Диск) Запрос:

POST https://www.googleapis.com/oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 65
Expect: 100-continue
Connection: Keep-Alive

client_id=&client_secret=&grant_type=refresh_token&refresh_token=
и данные об ответах google
HTTP/1.1 400 Bad Request
Vary: X-Origin
Content-Type: application/json; charset=UTF-8
Date: Tue, 07 Mar 2017 06:02:05 GMT
Expires: Tue, 07 Mar 2017 06:02:05 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alt-Svc: quic=":443"; ma=2592000; v="36,35,34"
Accept-Ranges: none
Vary: Origin,Accept-Encoding
Transfer-Encoding: chunked

{
 "error": "invalid_request",
 "error_description": "Missing required parameter: refresh_token"
}
ОБНОВЛЕННЫЙ

Это страница API для конечной точки, которую вы вызываете: События: смотреть |  Google Calendar API  |  Разработчики Google[^]

В документе говорится, что запрос представляет собой пакет Json:
In the request body, supply data with the following structure:

{
  "id": string,
  "token": string,
  "type": string,
  "address": string,
  "params": {
    "ttl": string
  }
}
Ваши данные находятся в неправильном виде. Таким образом, вы правильно получаете Ошибка Синтаксического Анализа ответ.

Обновление 2 re: ошибка авторизации

Сначала вам нужно пройти аутентификацию, чтобы получить доступ к вашим личным данным, прежде чем вы сможете опубликовать изменения. Аутентификация-это нечто большее, чем код, который вы предоставили для своей проблемы. Вам нужно выполнить шаги, описанные в следующей ссылке: [^]

После того как вы устранили ошибку авторизации, вы можете попробовать создать свой webhook.


vamsi2710

Я пытаюсь создать его программно, но не вижу результатов ответа...Можете ли вы дать мне знать, где и как я могу увидеть детали моего плохого запроса

Graeme_Grant

в ответном теле ... прочтите ответ так же, как вы бы прочитали любые возвращенные данные.

Graeme_Grant

если вы хотите "заглянуть" в данные, то используйте такой инструмент, как: Скрипач бесплатный веб-прокси для отладки[^]

vamsi2710

Это то, что я получаю в трассировке стека в ответе

в системе.Нет.Класса HttpWebRequest.Творческий()
в calendarquickstart.Программы.Основные(string[] аргументы) в c:\users\haanapoc\documents\visual студия 2010\проекты\calendarquickstart\calendarquickstart\программы.CS:линия 95
в системе.AppDomain. _nExecuteAssembly (сборка RuntimeAssembly, String[] args)
в системе.домен приложений.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в корпорации Microsoft.VisualStudio.Хостингпроцесс.HostProc.RunUsersAssembly()
в системе.Нарезание резьбы.ThreadHelper.ThreadStart_Context(состояние объекта)
в системе.Нарезание резьбы.Параллельном режиме.RunInternal(параллельном режиме параллельном режиме, ContextCallback обратного вызова, состояние объекта, логическое preserveSyncCtx)
в системе.Нарезание резьбы.Параллельном режиме.Выполнения(в параллельном режиме параллельном режиме, ContextCallback обратного вызова, состояние объекта, логическое preserveSyncCtx)
в системе.Нарезание резьбы.ExecutionContext. Run(ExecutionContext executionContext, ContextCallback callback, состояние объекта)

vamsi2710

HTTP/1.1 400 плохой запрос
Различаются: Х-Происхождения
Content-Type: application/json; charset=UTF-8
Дата: Вт, 07 марта 2017 06: 30:57 GMT
Срок действия: Вт, 07 марта 2017 06: 30:57 GMT
Cache-Control: private, max-age=0
Х-тип содержимого-варианты: nosniff
X-Frame-опции: SAMEORIGIN
X-XSS-защита: 1; режим=блок
Сервер: GSE
Alt-Svc: quic=": 443"; ma=2592000; v= " 36,35,34"
Accept-диапазоны: нет
Различаются: Происхождение, Прием-Кодировка
Кодирования передачи: поблочное

ab
{
"ошибка": {
"ошибки": [
{
"домен": "глобальный",
"причина": "parseError",
"сообщение": "Ошибка синтаксического анализа"
}
],
"код": 400,
"сообщение": "Ошибка синтаксического анализа"
}
}

0

Graeme_Grant

parseError предполагает, что данные, которые вы отправляете, находятся не в правильном формате.

Graeme_Grant

Обновил свое решение дополнительной информацией.

vamsi2710

Привет Грант,

Спасибо за ответ...Я внес изменения, как вы просили.Теперь я получаю ответ: "401: несанкционированная ошибка"

Не могли бы вы помочь мне с этим

HttpWebRequest request1 = (HttpWebRequest)WebRequest.Создать("https://www.googleapis.com/calendar/v3/calendars/floristpanel@gmail.com/events/watch");
запрос 1.Method = " POST";

запрос 1.Headers. Add ("Authorization", "Bearer" + accesstoken);
запрос 1.ContentType = " application/json";

используя (ВАР модулю записи StreamWriter = новая модулю записи StreamWriter(запроса1.Метод getrequeststream()))
{
строку JSON = "{\"введите\":\"web_hook\"," +
"\"адрес\":\"https://www.hanafloralpos.com/notification.aspx\"," +
"\"фишка\":\"ya29.dsgfjksdgjkfgskdjhfksdhhdfhsdkl\"," +
"\"id\": \ " 01234567-89ab-cdef-0123456789ab\"}";
модулю записи StreamWriter.Write(json);
модулю записи StreamWriter.Промывать();
модулю записи StreamWriter.Закрывать();
}

var httpResponse = (HttpWebResponse)request1. GetResponse();
используя (вар что streamreader = новый поток streamreader(объект HttpResponse.GetResponseStream()))
{
ВАР результат = что streamreader.ReadToEnd();
}

Graeme_Grant

Вы знаете, что у google есть свой собственный C# API lib, не так ли? Это значительно облегчит вашу жизнь... У меня есть пользовательская библиотека из-за наших передовых требований...

Клиентская библиотека API для .NET  |  Разработчики Google[^]

vamsi2710

Привет,

Спасибо за ответ.Я попробовал в библиотеке, которую вы предоставили, и я получаю ошибку как :

{
"ошибка": {
"ошибки": [
{
"домен": "глобальный",
"причина": "толчок.webhookUrlUnauthorized",
"сообщение": "несанкционированный канал обратного вызова WebHook: https://www.hanafloralpos.com/notification.aspx"
}
],
"код": 401,
"сообщение": "несанкционированный канал обратного вызова WebHook: https://www.hanafloralpos.com/notification.aspx"
}
}

Graeme_Grant

С помощью быстрого google я вижу, что многие другие столкнулись с этой же проблемой, и вы можете найти свой ответ здесь: Гугл АПИ несанкционированного канала обратного вызова веб-перехватчик - поиск в Google [^]

Я подозреваю, что это именно тот ответ, который вы ищете: java - Google push-уведомления - несанкционированный канал обратного вызова WebHook-переполнение стека[^] (Не обращайте внимания на то, что это Java)

vamsi2710

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

Graeme_Grant

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

Но быстро ошибка становится тем, что она есть - вы не передаете действительный токен авторизации. подробнее об этом вы можете прочитать здесь:
Авторизация запросов API
[^]

vamsi2710

Я добавил сгенерированный токен запроса, но все еще получаю ту же проблему :(

HttpWebRequest request1 = (HttpWebRequest)WebRequest.Создать("https://www.googleapis.com/calendar/v3/calendars/floristpanel@gmail.com/events/watch");
запрос 1.Method = " POST";

запрос 1.Headers. Add ("Authorization", "Bearer" + accesstoken);
запрос 1.ContentType = " application/json";

используя (ВАР модулю записи StreamWriter = новая модулю записи StreamWriter(запроса1.Метод getrequeststream()))
{
строку JSON = "{\"введите\":\"web_hook\"," +
"\"адрес\":\"https://www.hanafloralpos.com/notificationnew.aspx\"," +
"\"token\":\"ya29.GlsHBHxTCEnbrV-B_cz-YJpNRUTJlVKiDZTw1Tpl65xuWkeXfdFuwzs5umxuqv641rab11tzhkjdhmhfqo28d3gtnsv6ux8m02dryfexur-F5rJ8LBTqPksD31UT\", " +
"\"id\": \ " 01234567-89ab-cdef-0123456789ab\"}";
модулю записи StreamWriter.Write(json);
модулю записи StreamWriter.Промывать();
модулю записи StreamWriter.Закрывать();
}

var httpResponse = (HttpWebResponse)request1. GetResponse();
используя (вар что streamreader = новый поток streamreader(объект HttpResponse.GetResponseStream()))
{
ВАР результат = что streamreader.ReadToEnd();
}

Graeme_Grant

Вы читали ссылку на документацию, которую я вам предоставил? Можете ли вы подтвердить подлинность?

PS: Не размещайте код в ответах, вот для чего этот вопрос. Пожалуйста, нажмите на кнопку улучшить вопрос и обновите эту дополнительную информацию.

vamsi2710

Нет, я не могу подтвердить подлинность...Он выдает ту же самую несанкционированную ошибку....Не могли бы вы уделить несколько минут изучению кода на моем конце?..Как это действует мне на нервы :(

Graeme_Grant

вам нужно сделать это сначала, прежде чем вы сможете публиковать данные. Аутентификация-это нечто большее, чем предоставленный код. Вам нужно выполнить шаги по ссылке, которая была предоставлена. Если OAuth 2.0 слишком сложен, то используйте их lib.

vamsi2710

Я попытался проверить то же самое в следующем url-адресе : https://developers.google.com/google-apps/calendar/v3/reference/events/watch

предоставив параметры: calendarId : floristpanel@gmail.com

Я не передаю токен, так как он упоминается как необязательный...

{
"id": "01234567-89ab-cdef-0123456789abc",
"тип": "web_hook",
"адрес": "https://www.hanafloralpos.com/notificationnew.aspx",
"параметры": {
"ttl": "640000"
},
}

Graeme_Grant

Опять же, не публикуйте эту информацию здесь, добавьте ее в вопрос, чтобы другие могли видеть.

vamsi2710

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

vamsi2710

Я получаю это исключение :

"домен": "глобальный",
"причина": "толчок.webhookUrlUnauthorized",
"сообщение": "несанкционированный канал обратного вызова WebHook: https://www.hanafloralpos.com/notificationnew.aspx"