如何在.Net中手动创建HTTP请求?
我想创建自己的自定义HTTP请求。WebClient类非常酷,但它会自动创建HTTP请求。我想我需要创建一个到web服务器的网络连接,并通过该流传递数据,但我不熟悉支持这种事情的库类 (上下文,我正在为我正在教授的web编程课程编写一些代码。我希望我的学生了解HTTP“黑盒子”中发生的基本情况。)根据需要使用or类 如果您需要比这些提供的级别低,请查看其他System.Net.Sockets.*客户端类,例如。如果您想编写自己的低级别客户端,请签出。对于HTTPGET和POST,您可以使用和类如何在.Net中手动创建HTTP请求?,.net,http,webclient,.net,Http,Webclient,我想创建自己的自定义HTTP请求。WebClient类非常酷,但它会自动创建HTTP请求。我想我需要创建一个到web服务器的网络连接,并通过该流传递数据,但我不熟悉支持这种事情的库类 (上下文,我正在为我正在教授的web编程课程编写一些代码。我希望我的学生了解HTTP“黑盒子”中发生的基本情况。)根据需要使用or类 如果您需要比这些提供的级别低,请查看其他System.Net.Sockets.*客户端类,例如。如果您想编写自己的低级别客户端,请签出。对于HTTPGET和POST,您可以使用和类
如果你真的是受虐狂,你可以去低于
TcpClient
并实现你自己的Socket
,请参阅。在我对这篇文章的回复中,我已经介绍了创建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();
}
}
要真正理解HTTP协议的内部结构,可以使用类: 另一种可能是将以下内容放入
app.config
中,然后仅使用执行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>
最后分析生成的network.log
文件中的网络流量<代码>网络客户端也将遵循HTTP重定向。用于演示
至于编程,它可以让你控制很多关于请求的事情——同样,如果是为了演示的话,我会用它来嗅探当你使用HttpWebRequest执行各种任务时发生的事情。web请求的漫长过程。使用TcpClient还需要他理解Http所基于的TELNET协议。@John Saunders:Http不是基于TELNET协议构建的。尽管可以使用telnet客户端连接到web服务器。@Igor:我看你是对的。我一定是把它和FTP混淆了。-1:缺少
使用流阅读器/写入程序的块和响应。@约翰·桑德斯:我知道“使用”是一种很好的编码模式,但是-在流阅读器上调用close()会关闭底层流并“释放与该阅读器相关的任何系统资源”(有关文档,请参阅MSDN)。因此-如果你认为我在这里偷懒,那你就错了。如果中间的某些东西抛出异常,那么你就是在泄漏。@naivists:特别是在示例代码中,因为有人会复制和粘贴它!总是树立一个好的示例。别担心。很久以前我就知道示例代码总是附带一个“购买软件”标签。我宁愿有一个不完美的例子,也不愿什么都没有。谢谢奈维斯特的时间。+1作为一个例子,我期待着尝试一下。这是一个很好的方式来可视化正在发生的事情。谢谢
<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>
using (var client = new WebClient())
{
var result = client.DownloadString("http://www.google.com");
}