cURL

sergio197675

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

Из замеательной темы https://zennolab.com/discussion/threads/curl-otlichnaja-alternativa-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 авторизация проходит хорошо, проблема только в ответе с кодировкой

Или пните , пжлста какие темы почитать?
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Здравствуйте!

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

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
318
Баллы
63
Здравствуйте!

По большому счёту выглядит будто это не в кодировке дело, а в том, что ответ приходит в сжатом виде.
К сожалению с curl не работал.
Чтобы помочь Вам решить Вашу проблему прежде всего интересно чем не устраивают Вас стандартные методы Зеннопостера для отправки этих же самых запросов?
Писал выше, не соображу как и где правильно расположить строку" Authorization: Bearer ...." в "кубике" zenno , в от вет приходит "вы не авторизированы", а с этим "курлом" - авторизация внорме. Стыдно уже- убил неделю , но не разобрался с авторизацией на гугл клоуд платформ, втч и получением токена из json средствами zenno...
Про сжатие читал, но вроде нигде не указанно в запросах\ответах, что оно используется...
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Попробуйте подставить свои данные в этот код:
Код:
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

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
318
Баллы
63
Авторизация проходит
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unexpected token.\ndata=123\n^",
"status": "INVALID_ARGUMENT"
}
}

прийдётся C# осваивать)
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Ответ от сервера не имеет отношения к C#.
Вы не подставили свои данные в
Код:
content = @"data=123"
- там ведь у Вас должно быть что-то вроде:
Код:
"{\"queryInput\":{\"text\":{\"text\":\"адрес доставки\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}"
Из-за чего сервер и прислал Вам ответ, мол я не в курсе что это за данные такие data=123, так как я ожидал какой-то объект JSON.
 

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
318
Баллы
63
Ответ от сервера не имеет отношения к C#.
Вы не подставили свои данные в
Код:
content = @"data=123"
- там ведь у Вас должно быть что-то вроде:
Код:
"{\"queryInput\":{\"text\":{\"text\":\"адрес доставки\",\"languageCode\":\"ru\"}},\"queryParams\":{\"timeZone\":\"Asia/Yekaterinburg\"}}"
Из-за чего сервер и прислал Вам ответ, мол я не в курсе что это за данные такие data=123, так как я ожидал какой-то объект JSON.
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;

Тип Время Сообщение
23:55:15 Компиляция кода Ошибка в действии "CS1056" "Непредусмотренный символ "\"". [Строка: 1; Cтолбец: 33]
токен временный...
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Вариант 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

sergio197675

Client
Регистрация
21.09.2019
Сообщения
360
Благодарностей
318
Баллы
63
Большое Человеческое спасибо! Работает! Потренеруюсь с грамматикой С# и буду осваивать гугл клоуд дальше)
 

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