用 socket 访问 http代理服务器,怎么用账号和密码获取服务器的验证?怎么访问网页?
我找了份源码,但没有获取服务器验证的功能,试了很多方法,找了很多网站都没用.
public static Socket ConnectToSocks5Proxy(string proxyAdress, ushort proxyPort, string destAddress, ushort destPort, string userName, string password) { IPAddress destIP = null; IPAddress proxyIP = null; byte[] request = new byte[257]; byte[] response = new byte[257]; byte[] tmpBuffer = new byte[40]; proxyIP = IPAddress.Parse(proxyAdress); destIP = IPAddress.Parse(destAddress); IPEndPoint proxyEndPoint = new IPEndPoint(proxyIP, proxyPort); Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Connect(proxyEndPoint); String temp; temp = String.Format("CONNECT 127.0.0.1:443 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)\r\n Proxy-Connection: Keep-Alive\r\n Proxy-Authorization: Basic YWRyZDExMTphZDgxOA== \r\n\r\n", destAddress, destPort); request = System.Text.Encoding.ASCII.GetBytes(temp); s.Send(request, temp.Length, SocketFlags.None); s.Receive(response); // Get variable length response... String tempstr = System.Text.Encoding.UTF8.GetString(response); if (tempstr.Substring(9, 3) == "200") { return s; } return null; }
通过Http Header发送以下信息:
Proxy-Authorization: Basic <BASE64("USER:PASS")>
你好,我添加这个头,可还是不行,不知道是不是我写错了,请帮我看看
String.Format("CONNECT 127.0.0.1:443 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)\r\n Proxy-Connection: Keep-Alive\r\n Proxy-Authorization: Basic <BASE64({0}:{1})>\r\n\r\n", userName, password)
这是我借用小提琴获取的头,可也是不行
"CONNECT 127.0.0.1:443 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)\r\n Proxy-Connection: Keep-Alive\r\n Proxy-Authorization: Basic YWRyZDExMTphZDgxOA==
\r\n\r\n"
@dudu: 这个方式可以设置代理的验证信息,如何指向代理服务器呢.?
@xmj112288: 建议先用80端口进行测试
@发粪图墙: 这个可以问一下楼主
@dudu: 和端口的关系不大吧,我可以连接上代理,就是取不到代理的验证,不知道怎么传账号和密码
@发粪图墙: connect后面就是指向的代理,只不过我本地用stunnel做了中转,就指向了本地
@xmj112288: 代理用的是什么验证方式?
@dudu: 以前用httpwebrequest时能行,直接把代理ip账号密码付给WebProxy传出去,现在换了Socket,不知道怎么把账号密码传出去了.我本地用stunnel做了中转,在访问代理服务器,用的是http协议的代理.
让我轻轻的告诉你,对于https或其它产生的connect请求,发送请求后,直接先返回一条应答的信息,之后才传输的请求数据。
相关代码,可以看我博客http代理相关文章里关于QQ上网实现的部分。
你好,我不是自己实现代理,而是用socket去访问代理服务器,和你做的不一样