【发布时间】:2011-12-09 13:55:56
【问题描述】:
我正在尝试通过 C# 套接字发送 HTTP 请求并从服务器接收响应,我是这种语言的新手。
我编写了以下代码(IP 解析正确):
IPEndPoint RHost = new IPEndPoint(IP, Port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(RHost);
String HTTPRequestHeaders_String = "GET ?q=fdgdfg HTTP/1.0
Host: google.com
Keep-Alive: 300
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
Referer: http://google.com/";
MessageBox.Show(HTTPRequestHeaders_String, "Request");
byte[] HTTPRequestHeaders = System.Text.Encoding.ASCII.GetBytes(HTTPRequestHeaders_String);
socket.Send(HTTPRequestHeaders, SocketFlags.None);
String Response = "";
byte[] buffer = new byte[(int) socket.ReceiveBufferSize];
int bytes;
do
{
// On this lane program stops to react
bytes = socket.Receive(buffer);
// This line cannot be reached, tested with breakpoint
Response += Encoding.ASCII.GetString(buffer, 0, bytes);
}
while (bytes >= 0);
MessageBox.Show(Response, "Response");
我做错了什么?我只需要加载页面的完整 HTML,或者从响应中加载至少几个字符(我什至不能这样做)。
【问题讨论】:
-
使用
HttpWebRequest类。 -
@SLaks 我会更进一步 -
WebClient... -
我需要将 HTTP 请求标头创建为字符串,在这些类中可以吗?
-
为什么需要手动创建HTTP请求头?
-
您可以将标题添加为字符串,请参阅下面的答案
标签: c# http sockets web-crawler