cURL

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Реакции
320
Баллы
63
Добрый день!

Из замеательной темы https://zennolab.com/discussion/thr...tiva-dlja-vypolnenija-zaprosov-get-post.33699

- код отправляющий запрос
C#:
Развернуть Свернуть Копировать
System.Diagnostics.ProcessStartInfo processStartInfo = new System.Diagnostics.ProcessStartInfo();
processStartInfo.CreateNoWindow = true;
processStartInfo.FileName = project.Directory + "\\curl.exe";
processStartInfo.Arguments = project.Variables["ARGUMENTS"].Value.Trim();
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardOutput = true;

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = processStartInfo;
process.Start();
string output = process.StandardOutput.ReadToEnd().Trim();
process.WaitForExit();
if (process.ExitCode != 0)
{
    throw new Exception("ERROR:" + output);
}

return output;
//return Encoding.GetEncoding(1251).GetString(Encoding.Default.GetBytes(output));



и сам запрос

curl -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer ya29.c.Kl6vB3L7FeNgyqjvg***MSAqWHsJ1ZyjzpmfEo-PM0RntbAKSEDSHwtDZXm7XKWukJ0jMblJnkt9N3LB9cz8inEOf55V9FG0-4UHop1AvVKen6CTbnfSUV7" -d "{\"queryInput\":{\"text\":{\"text\":\"адрес доставки\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}" "https://****

Вопрос , подскажите как исправить , чтобы в ответе была правильная кодировка , тк приходит ответ типа вместо руских слов "Как всегда " -, если в запросе ставить en - проблем с латиницей нет.

charset в запросе значения разные пробовал ...в коде // убирать пробовал...

Дополнительно вопрос - в кубике POST, как правильно расположить Authorization: Bearer .....? Почему то ни как не проходит авторизация . С СURL авторизация проходит хорошо, проблема только в ответе с кодировкой

Или пните , пжлста какие темы почитать?
 
Здравствуйте!

По большому счёту выглядит будто это не в кодировке дело, а в том, что ответ приходит в сжатом виде (естественно я могу ошибаться...).
К сожалению с curl не работал.
Чтобы помочь Вам решить Вашу проблему прежде всего интересно чем не устраивают Вас стандартные методы Зеннопостера для отправки этих же самых запросов?
 
Здравствуйте!

По большому счёту выглядит будто это не в кодировке дело, а в том, что ответ приходит в сжатом виде.
К сожалению с curl не работал.
Чтобы помочь Вам решить Вашу проблему прежде всего интересно чем не устраивают Вас стандартные методы Зеннопостера для отправки этих же самых запросов?
Писал выше, не соображу как и где правильно расположить строку" Authorization: Bearer ...." в "кубике" zenno , в от вет приходит "вы не авторизированы", а с этим "курлом" - авторизация внорме. Стыдно уже- убил неделю , но не разобрался с авторизацией на гугл клоуд платформ, втч и получением токена из json средствами zenno...
Про сжатие читал, но вроде нигде не указанно в запросах\ответах, что оно используется...
 
Попробуйте подставить свои данные в этот код:
Код:
Развернуть Свернуть Копировать
string url = @"http://site.ru";
string content = @"data=123";
string content_type = @"application/json; charset=utf-8";
string encoding =  "UTF-8";
string proxy = "111.111.111.111:8888";
int timeout = 30000;
string cookie = string.Empty;
string useragent = project.Profile.UserAgent;
string[] header = new [] {
    "Authorization: Bearer ya29.c.Kl6vB3L7F",
    "Accept-Encoding: gzip, deflate",
    "Referer: https://site.ru"
};
string post = ZennoPoster.HttpPost(
    url,  content,   content_type,  
    proxy,   encoding,   ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    timeout,   cookie ,   useragent,   false,  0,header
);
return post;
 
Последнее редактирование:
  • Оценить
Реакции: sergio197675
Авторизация проходит
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unexpected token.\ndata=123\n^",
"status": "INVALID_ARGUMENT"
}
}

прийдётся C# осваивать)
 
Ответ от сервера не имеет отношения к C#.
Вы не подставили свои данные в
Код:
Развернуть Свернуть Копировать
content = @"data=123"
- там ведь у Вас должно быть что-то вроде:
Код:
Развернуть Свернуть Копировать
"{\"queryInput\":{\"text\":{\"text\":\"адрес доставки\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}"
Из-за чего сервер и прислал Вам ответ, мол я не в курсе что это за данные такие data=123, так как я ожидал какой-то объект JSON.
 
Ответ от сервера не имеет отношения к C#.
Вы не подставили свои данные в
Код:
Развернуть Свернуть Копировать
content = @"data=123"
- там ведь у Вас должно быть что-то вроде:
Код:
Развернуть Свернуть Копировать
"{\"queryInput\":{\"text\":{\"text\":\"адрес доставки\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}"
Из-за чего сервер и прислал Вам ответ, мол я не в курсе что это за данные такие data=123, так как я ожидал какой-то объект JSON.
string url = @"https://dialogflow.googleapis.com/v...18c9-58cc-6149-2a20-0ba7ce30f049:detectIntent";
string content = @"{\"queryInput\":{\"text\":{\"text\":\"часы работы\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}";
string content_type = @"application/json; charset=utf-8";
string encoding = "UTF-8";
string proxy = "";
int timeout = 30000;
string cookie = string.Empty;
string useragent = project.Profile.UserAgent;
string[] header = new [] {
"Authorization: Bearer ya29.c.Kl6vBwyVlFcKj_yoxkLLjy0aKUbS8bOBo1ADAXM0v2ZzCqe587rmo_doZUNqETvudYeDRCsWJeT6JrKpJ-_pEPg21DiTRIS4-1BGAWkXut_kidXg9oTXZF8AHuOuifW",
"Accept-Encoding: gzip, deflate",
"Referer: https://site.ru",
};
string post = ZennoPoster.HttpPost(
url, content, content_type,
proxy, encoding, ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
timeout, cookie , useragent, false, 0,header
);
return post;

Тип Время Сообщение
23:55:15 Компиляция кода Ошибка в действии "CS1056" "Непредусмотренный символ "\"". [Строка: 1; Cтолбец: 33]
токен временный...
 
Вариант 1 - просто убрал собачку возле content, так как символ кавычка уже экранирован
Код:
Развернуть Свернуть Копировать
string url = @"https://dialogflow.googleapis.com/v2beta1/projects/kate-lwheqf/agent/sessions/862e18c9-58cc-6149-2a20-0ba7ce30f049:detectIntent";
string content = "{\"queryInput\":{\"text\":{\"text\":\"часы работы\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}";
string content_type = @"application/json; charset=utf-8";
string encoding = "UTF-8";
string proxy = "";
int timeout = 30000;
string cookie = string.Empty;
string useragent = project.Profile.UserAgent;
string[] header = new [] {
"Authorization: Bearer ya29.c.Kl6vBwyVlFcKj_yoxkLLjy0aKUbS8bOBo1ADAXM0v2ZzCqe587rmo_doZUNqETvudYeDRCsWJeT6JrKpJ-_pEPg21DiTRIS4-1BGAWkXut_kidXg9oTXZF8AHuOuifW",
"Accept-Encoding: gzip, deflate",
"Referer: https://site.ru",
};
string post = ZennoPoster.HttpPost(
url, content, content_type,
proxy, encoding, ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
timeout, cookie , useragent, false, 0,header
);
return post;
Вариант 2 - просто экранировал двойную кавычку (собачку не убирал) - обратный слеш заменил на кавычку.
Код:
Развернуть Свернуть Копировать
string url = @"https://dialogflow.googleapis.com/v2beta1/projects/kate-lwheqf/agent/sessions/862e18c9-58cc-6149-2a20-0ba7ce30f049:detectIntent";
string content = @"{""queryInput"":{""text"":{""text"":""часы работы"",""languageCode"":""ru""}},""queryParams"":{""timeZone"":""Asia/Yekaterinburg""}}";
string content_type = @"application/json; charset=utf-8";
string encoding = "UTF-8";
string proxy = "";
int timeout = 30000;
string cookie = string.Empty;
string useragent = project.Profile.UserAgent;
string[] header = new [] {
"Authorization: Bearer ya29.c.Kl6vBwyVlFcKj_yoxkLLjy0aKUbS8bOBo1ADAXM0v2ZzCqe587rmo_doZUNqETvudYeDRCsWJeT6JrKpJ-_pEPg21DiTRIS4-1BGAWkXut_kidXg9oTXZF8AHuOuifW",
"Accept-Encoding: gzip, deflate",
"Referer: https://site.ru",
};
string post = ZennoPoster.HttpPost(
url, content, content_type,
proxy, encoding, ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
timeout, cookie , useragent, false, 0,header
);
return post;

Вариант 3 (обычно что-то приходится менять в JSON прежде чем его отправлять, из-за этого мне кажется что данный вариант более предпочтительный, но в определенных случаях он не подходит, например тогда, когда нужно чтобы в JSON не было пробелов).
Код:
Развернуть Свернуть Копировать
string json = "{\"queryInput\":{\"text\":{\"text\":\"часы работы\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}";
project.Json.FromString(json);

string url = @"https://dialogflow.googleapis.com/v2beta1/projects/kate-lwheqf/agent/sessions/862e18c9-58cc-6149-2a20-0ba7ce30f049:detectIntent";
string content = project.Json.ToString();
string content_type = @"application/json; charset=utf-8";
string encoding = "UTF-8";
string proxy = "";
int timeout = 30000;
string cookie = string.Empty;
string useragent = project.Profile.UserAgent;
string[] header = new [] {
"Authorization: Bearer ya29.c.Kl6vBwyVlFcKj_yoxkLLjy0aKUbS8bOBo1ADAXM0v2ZzCqe587rmo_doZUNqETvudYeDRCsWJeT6JrKpJ-_pEPg21DiTRIS4-1BGAWkXut_kidXg9oTXZF8AHuOuifW",
"Accept-Encoding: gzip, deflate",
"Referer: https://site.ru",
};
string post = ZennoPoster.HttpPost(
url, content, content_type,
proxy, encoding, ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
timeout, cookie , useragent, false, 0,header
);
return post;
 
  • Оценить
Реакции: sergio197675
Большое Человеческое спасибо! Работает! Потренеруюсь с грамматикой С# и буду осваивать гугл клоуд дальше)
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)