Я хотел бы создать свои собственные Запросы HTTP. Класс WebClient очень прохладен, но он создает Запросы HTTP автоматически. Я думаю, что должен создать сетевое соединение с веб-сервером и передать мои данные по тому потоку, но я незнаком с классами библиотеки, которые поддерживали бы такую вещь.
(Контекст, я работаю над некоторым кодом для класса веб-программирования, который я преподаю. Я хочу, чтобы мои студенты поняли основы того, что происходит в "черном квадрате" HTTP.)
Для действительно понять внутреннее количество интернет-протокола 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.
Используйте WebRequest или WREPONSE классы, как требуется.
Если вам нужно снизить уровень, чем они предоставляют, посмотрите на другую систему .NE.NET.Sockets. * Клиентские классы, такие как TCPClient .
Проверьте System.net.sockets.tcpclient
Если вы хотите написать свой собственный клиент низкого уровня. Для HTTP Get и Post вы можете использовать httpwebRequest
и классы httpWebresponse
.
Если вы действительно мазошисты, вы можете пойти ниже TCPClient
и внедряют свой собственный сокет
, см. В классе сокета .
В моем ответе на этот счет на этот счет 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();
}
}
Использование WFIRT для демонстрации.
Что касается программирования, httpwebrequest позволяет вам контролировать еще немного о запросе - еще раз, если это для демонстрации, которую я использовал Wireshark , чтобы понюхать то, что происходит через провод, когда вы делать различные задачи с httpwebrequest