Как я Создаю Запрос HTTP Вручную в .NET?

Я хотел бы создать свои собственные Запросы HTTP. Класс WebClient очень прохладен, но он создает Запросы HTTP автоматически. Я думаю, что должен создать сетевое соединение с веб-сервером и передать мои данные по тому потоку, но я незнаком с классами библиотеки, которые поддерживали бы такую вещь.

(Контекст, я работаю над некоторым кодом для класса веб-программирования, который я преподаю. Я хочу, чтобы мои студенты поняли основы того, что происходит в "черном квадрате" HTTP.)

6
задан Jeff 22 January 2010 в 04:56
поделиться

5 ответов

Для действительно понять внутреннее количество интернет-протокола HTTP, вы можете использовать TCPClient класс:

using (var client = new TcpClient("www.google.com", 80))
{
    using (var stream = client.GetStream())
    using (var writer = new StreamWriter(stream))
    using (var reader = new StreamReader(stream))
    {
        writer.AutoFlush = true;
        // Send request headers
        writer.WriteLine("GET / HTTP/1.1");
        writer.WriteLine("Host: www.google.com:80");
        writer.WriteLine("Connection: close");
        writer.WriteLine();
        writer.WriteLine();

        // Read the response from server
        Console.WriteLine(reader.ReadToEnd());
    }
}

Другая возможность состоит в том, чтобы активировать трассировку , поместив следующие В ваше app.config и просто используйте WebClient для выполнения HTTP-запроса:

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="protocolonly">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Verbose"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="network.log" />
    </sharedListeners>
    <trace autoflush="true"/>
  </system.diagnostics>
</configuration>

, затем вы можете выполнить HTTP Call:

using (var client = new WebClient())
{
    var result = client.DownloadString("http://www.google.com");
}

и, наконец, анализируют сетевой трафик в сгенерированном Network.Log файл. WebClient также будет следовать HTTP Redirets.

18
ответ дан 8 December 2019 в 03:39
поделиться

Используйте WebRequest или WREPONSE классы, как требуется.

Если вам нужно снизить уровень, чем они предоставляют, посмотрите на другую систему .NE.NET.Sockets. * Клиентские классы, такие как TCPClient .

4
ответ дан 8 December 2019 в 03:39
поделиться

Проверьте System.net.sockets.tcpclient Если вы хотите написать свой собственный клиент низкого уровня. Для HTTP Get и Post вы можете использовать httpwebRequest и классы httpWebresponse .

Если вы действительно мазошисты, вы можете пойти ниже TCPClient и внедряют свой собственный сокет , см. В классе сокета .

3
ответ дан 8 December 2019 в 03:39
поделиться

В моем ответе на этот счет на этот счет SharePoint 2007, как проверить, существует ли папка в библиотеке документов Я включил основы создания httpwebrequest и чтения ответа.

Редактировать: добавлен код примера с поста выше

System.Net.HttpWebRequest oReq; 
string sUrl = "http://yoursite/sites/somesite/DocumentLibrary"; 
oReq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(sUrl); 

oReq.Method = "GET"; 
oReq.Credentials = System.Net.CredentialCache.DefaultCredentials; 
oReq.AllowAutoRedirect = true; 

//now send the request
using (System.IO.StreamWriter oRequest = 
        new System.IO.StreamWriter(oReq.GetRequestStream())) { 
   oRequest.WriteLine(); 
}

//and read all the response
using (System.Net.HttpWebResponse oResponse = oReq.GetResponse()){
  using (System.IO.StreamReader oResponseReader = 
        new System.IO.StreamReader(oResponse.GetResponseStream())){
    string sResponse = oResponseReader.ReadToEnd(); 
  }
}
2
ответ дан 8 December 2019 в 03:39
поделиться

Использование WFIRT для демонстрации.

Что касается программирования, httpwebrequest позволяет вам контролировать еще немного о запросе - еще раз, если это для демонстрации, которую я использовал Wireshark , чтобы понюхать то, что происходит через провод, когда вы делать различные задачи с httpwebrequest

1
ответ дан 8 December 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: