Отправить HttpListenerRequest на другой веб-сайт

#c# #http #httprequest

#c# #http #httprequest

Вопрос:

Я пытаюсь переслать http-запрос, который я получаю, на другой веб-сайт, поэтому вот как я получаю данные

 HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:3294/discord/");
listener.Start();
while (true)
{
    Console.WriteLine("Listening...");
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;
    //here is want to send data to https://www.discord.com/api/webhooks/#################/###########
}
 

для отправки данных я использую HttpClient.PostAsync(string requestUri, HttpContent content) , но я не могу отправить context.Request как HttpContent 🙁

Надеюсь, я дал достаточно информации.

Комментарии:

1. Не помещайте отправку в цикл While. Какую ошибку вы получаете? Протестируйте неудачную строку кода самостоятельно и приступайте к работе, прежде чем пытаться вместе со слушателем.

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

3. Данные находятся либо в теле, либо во вложении. Похоже, вы пытаетесь использовать body. чтобы создать новый запрос (вы используете lIstnerRequest, что неверно); вам нужен post и задайте контекстную длину тела.

4. не могли бы вы прислать мне ссылку на учебник?

Ответ №1:

Код будет выглядеть примерно так:

 HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:3294/discord/");
listener.Start();

Console.WriteLine("Listening...");
HttpListenerContext context = listener.GetContext();

Stream body = context.Request.InputStream;
Encoding encoding = context.Request.ContentEncoding;
byte[] buffer = new byte[body.Length];
body.Read(buffer,0,(int)body.Length);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create ("https://www.discord.com/api/webhooks/#################/###########");
request.Method = "POST";
request.ContentType = context.Response.ContentType;

body.Position = 0;
request.ContentLength = body.Length;
Stream newStream = request.GetRequestStream();
newStream.Write(buffer, 0, buffer.Length);
HttpWebResponse response =  (HttpWebResponse)request.GetResponse();
 

Комментарии:

1. System.NotSupportedException: 'This stream does not support seek operations. с byte[] buffer = new byte[body.Length]; чем это связано?

2. исключение не имеет смысла в строке, которую вы опубликовали. Я добавил одну строку кода: body . Позиция = 0; I возможно, тело не содержит данных.

3. спасибо за помощь, я постараюсь выяснить причину этой ошибки 🙂