这个网站有点怪www.pharmacyexpress.com,首页 Response status 是 404 ,但是返回内容正常.这样的话,用 HttpWebRequest 或 WebRequest 就取不到它的内容,因为 404 是个错误.
这种情况下,第一反应用就是用 Tcp 来做,但是刚开始就犯了个错,纠结于TcpClient 的异步请求上,搞了半天,也没有从 tcp 取出一丁点数据来.
后来猛然发现,我只是建立了 tcp 连接,而没有告诉 服务器 我要做什么...难怪没有返回任何数据.真是汗颜啊...
怎么告诉服务器我要请求它的网页呢?当然用 Http Request Header 啊!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace Pharmacyexpress {
class Program {
private static MemoryStream msm = new MemoryStream();
private static byte[] bytes = new byte[1024];
static void Main(string[] args) {
TcpClient tcp = new TcpClient("www.pharmacyexpress.com", 80);
if (tcp != null) {
NetworkStream nst = tcp.GetStream();
MemoryStream msm = new MemoryStream();
StreamWriter sw = new StreamWriter(msm);
string header = "GET / HTTP/1.1\r\nAccept: */*\r\nHost: www.pharmacyexpress.com\r\n\r\n";
byte[] _header = Encoding.UTF8.GetBytes(header);
nst.Write(_header, 0, _header.Length);
nst.BeginRead(bytes, 0, bytes.Length, new AsyncCallback(Get), nst);
}
Console.Read();
}
private static void Get(IAsyncResult result) {
NetworkStream nst = (NetworkStream)result.AsyncState;
int len = nst.EndRead(result);
if (len == 0) {
msm.Position = 0;
StreamReader sr = new StreamReader(msm);
string ctx = sr.ReadToEnd();
return;
}
msm.Write(bytes, 0, len);
nst.BeginRead(bytes, 0, bytes.Length, new AsyncCallback(Get), nst);
}
}
}
关于如何请求 https (443) 的, 可以参考:
SslStream
| < Prev | Next > |
|---|
Last Updated ( Sunday, 13 June 2010 11:18 )



