PUT запрос

Kaspian

Client
Регистрация
23.12.2013
Сообщения
93
Благодарностей
132
Баллы
33
Подскажите, как правильно составить снипет, чтобы отправить PUT запрос?
Нашел на форуме такой код:
Код:
WebCliеnt client = new WebClient();
client.Headers[HttpRequеstHeader.ContentType] = "application/json";
string str = client.UploadString("https://www.zennolab.com", "PUT", "тут json");
Но получаю такие ошибки:


В запросе также нужно передавать cookie и user-agent.
Заранее благодарен.
 

Kaspian

Client
Регистрация
23.12.2013
Сообщения
93
Благодарностей
132
Баллы
33
Вот такой код по крайней мере не выдает ошибок при компиляции. Но при выполнении получаю ошибку 401 (несанкционированный). Как понимаю, это из-за того, без cookie отправляю.
Подскажите, как добавить куки? Как-то с помощью CookieContainer, я так понимаю. Нашел примеры использования, но смог разобраться. Буду признателен за помощь.
Код:
string cookie = project.Variables["cookie"].Value;
string url = project.Variables["url"].Value;

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = "{\"user\":\"user\"}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
}
 

Kaspian

Client
Регистрация
23.12.2013
Сообщения
93
Благодарностей
132
Баллы
33
Разобрался, все работает. Оставлю здесь, может понадобится кому-то в будущем
Код:
string cookie = project.Variables["cookie"].Value;
string url = project.Variables["url"].Value;
string useragent = project.Profile.UserAgent;

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";

httpWebRequest.Headers.Add("Cookie", cookie);
httpWebRequest.UserAgent =  useragent;

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = "{\"user\":\"user\"}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
В первом коде тоже все работает, просто в слове Web была русская буква). Добавляем юзинг usnig System.Net;
 
Последнее редактирование:
  • Спасибо
Реакции: Kaspian и alekwuy

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Разобрался, все работает. Оставлю здесь, может понадобится кому-то в будущем
Код:
string cookie = project.Variables["cookie"].Value;
string url = project.Variables["url"].Value;
string useragent = project.Profile.UserAgent;

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";

httpWebRequest.Headers.Add("Cookie", cookie);
httpWebRequest.UserAgent =  useragent;

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = "{\"user\":\"user\"}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Подскажите пожалуйста, как положить ответ сервера в переменную?
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Подскажите пожалуйста, как положить ответ сервера в переменную?
Последней строкой допишите:
return httpResponse;
Вернет значение в переменную, которая в кубике, если не включено "не возвращать значение"
или
project.Variables["переменная проекта"].Value = (HttpWebResponse)httpWebRequest.GetResponse();
вместо
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

только переменная уже должна быть создана в проекте
 

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Последней строкой допишите:
return httpResponse;
Вернет значение в переменную, которая в кубике, если не включено "не возвращать значение"
или
project.Variables["переменная проекта"].Value = (HttpWebResponse)httpWebRequest.GetResponse();
вместо
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

только переменная уже должна быть создана в проекте
Я делал вот так return httpResponse;, выскакивает ошибка в логах Выполнение действия CSharp OwnCode Удаленный сервер возвратил ошибку: (428 Precondition Required, это годный ответ, но C# расценивает как ошибку и не кладет ответ в переменную.
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Я делал вот так return httpResponse;, выскакивает ошибка в логах Выполнение действия CSharp OwnCode Удаленный сервер возвратил ошибку: (428 Precondition Required, это годный ответ, но C# расценивает как ошибку и не кладет весь ответ в переменную.
Попробуйте перед return - так сделать, т.е. дописать ToString().
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse().ToString();
 

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Попробуйте перед return - так сделать, т.е. дописать ToString().
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse().ToString();
Компиляция кода Ошибка в действии "CS0030" "Преобразование типа "string" в "System.Net.HttpWebResponse" невозможно".
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
824
Баллы
93
Компиляция кода Ошибка в действии "CS0030" "Преобразование типа "string" в "System.Net.HttpWebResponse" невозможно".
Потому что сначала идет выполнение метода ToString(), а потом уже приведение типов, string в HttpWebResponse.
Если очень хочется, то так
C#:
var httpResponse = ((HttpWebResponse)httpWebRequest.GetResponse()).ToString();
Но толку от этого мало. Т.к. возвращается объект типа HttpWebResponse, и просто так преобразовывать его в string нет смысла.
Надо читать то что находится в объекте через GetResponseStream, а дальше уже преобразовывать stream в byteArray или string в зависимости от ситуации.
В данном случае в string, т.к. в зенке в переменные можно сохранять только string.
https://msdn.microsoft.com/ru-ru/library/system.net.httpwebrequest.getresponse(v=vs.110).aspx
 

infosimple

Client
Регистрация
01.01.2015
Сообщения
429
Благодарностей
61
Баллы
28
Потому что сначала идет выполнение метода ToString(), а потом уже приведение типов, string в HttpWebResponse.
Если очень хочется, то так
C#:
var httpResponse = ((HttpWebResponse)httpWebRequest.GetResponse()).ToString();
Но толку от этого мало. Т.к. возвращается объект типа HttpWebResponse, и просто так преобразовывать его в string нет смысла.
Надо читать то что находится в объекте через GetResponseStream, а дальше уже преобразовывать stream в byteArray или string в зависимости от ситуации.
В данном случае в string, т.к. в зенке в переменные можно сохранять только string.
https://msdn.microsoft.com/ru-ru/library/system.net.httpwebrequest.getresponse(v=vs.110).aspx
Как я понимаю, это вот так
C#:
string cookie = "куки";
string url = "урл";
string useragent = "юзерагент";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
httpWebRequest.Method = "PUT";
httpWebRequest.Headers.Add("Cookie", cookie);
httpWebRequest.UserAgent =  useragent;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
  string json = "json";
  streamWriter.Write(json);
  streamWriter.Flush();
  streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
  var result = streamReader.ReadToEnd();
return result;
}
так тоже ответа нет.
 

xEngine33

Пользователь
Регистрация
25.03.2016
Сообщения
68
Благодарностей
14
Баллы
8
Ребят а брать JSON из переменной, делаю вот так:

Код:
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = project.Variables["BIO"].Value;
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}
Отдает 400 ошибку. [Недопустимый запрос], есть какое-либо решение? Спасибо :-)
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
582
Благодарностей
41
Баллы
28
чёто не выходит ничего .... вот есть линк который оканчивается .JSON есть данные которые нужно передать ... подскажите как это сделать?
 

ikibostus

Client
Регистрация
27.09.2015
Сообщения
256
Благодарностей
26
Баллы
28
Друзья, как добавить прокси проекта в PUT запрос?
 

Slava

Client
Регистрация
17.07.2015
Сообщения
36
Благодарностей
4
Баллы
8
  • Спасибо
Реакции: ikibostus

yriy158

Client
Регистрация
10.08.2013
Сообщения
490
Благодарностей
302
Баллы
63
Подскажите пожалуйста, а как огранизовать PUT-запрос с такими параметрами:


Пробовал способом, как описано выше:
Код:
tring cookie = project.Variables["cookie"].Value;
string url = project.Variables["url"].Value;
string useragent = project.Profile.UserAgent;
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";
httpWebRequest.Headers.Add("Cookie", cookie);
httpWebRequest.UserAgent =  useragent;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
  string json = project.Variables["secret"].Value;
  streamWriter.Write(json);
  streamWriter.Flush();
  streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
где в переменных
cookie - куки
--------------------
url - ссылка, на которую идет PUT (с нужным токеном)

--------------------
secret - переменная с параметрами, которые передаются в таком же виде как отснифал

Ноч то-то вообще глуха, ошибка в логе :
Компиляция кода Ошибка в действии "CS0116" "A namespace cannot directly contain members such as fields or methods". [Строка: -9; Cтолбец: 1]

Да и мне кажется что не так я как-то пеедаю эти параметры. Подскажите пожалуйста, как правильно организовать такой запрос?
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
824
Баллы
93
Ноч то-то вообще глуха, ошибка в логе :
Компиляция кода Ошибка в действии "CS0116" "A namespace cannot directly contain members such as fields or methods". [Строка: -9; Cтолбец: 1]
upload_2017-11-30_12-47-28.png
upload_2017-11-30_12-48-3.png
Надо добавить пространство имен System.Net.
Плюс во второй строчке в листинге кода опечатка. Если так и в коде, то будет ошибка.
tring cookie = project.Variables["cookie"].Value;
string cookie = project.Variables["cookie"].Value;
 
  • Спасибо
Реакции: yriy158

yriy158

Client
Регистрация
10.08.2013
Сообщения
490
Благодарностей
302
Баллы
63
Посмотреть вложение 24992
Надо добавить пространство имен System.Net.
Плюс во второй строчке в листинге кода опечатка. Если так и в коде, то будет ошибка.
tring cookie = project.Variables["cookie"].Value;
string cookie = project.Variables["cookie"].Value;
Спасибо!
Теперь при выполнении кубика выдает
Выполнение действия CSharp OwnCode The remote server returned an error: (500) Internal Server Error.
Буду гадать что не так.
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63
Так как получить ответ в json?

return httpResponse;
в ответе System.Net.HttpWebResponse
 

one

Client
Регистрация
22.09.2015
Сообщения
6 834
Благодарностей
1 275
Баллы
113

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63
Да я в этом nicht verstehen.
Если знает кто как взять ответ то дайте.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 834
Благодарностей
1 275
Баллы
113

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 101
Благодарностей
132
Баллы
63
Мне нужен ответ в старом варианте:

Код:
string cookie = project.Variables["cookie"].Value;
string url = project.Variables["url"].Value;
string useragent = project.Profile.UserAgent;
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";
httpWebRequest.Headers.Add("Cookie", cookie);
httpWebRequest.UserAgent =  useragent;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = "{\"user\":\"user\"}";
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
return ???????????????????????????????
 

Acedouble

Client
Регистрация
05.01.2018
Сообщения
20
Благодарностей
14
Баллы
3
return response.Headers.ToString(); //получим заголовки ответа
или
using (var read = new StreamReader(response.GetResponseStream())){
string data = read.ReadToEnd();
return data;
}
получим json от сервера
 
  • Спасибо
Реакции: Nats1

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