我正在尝试用 c# 编写一个小型代理服务器。它适用于我测试过的许多网页(包括 google.com 和 microsoft.com)。为了进行测试,我启动了代理服务器并在 Windows 8 上配置了 IE 10 以使用它。
但是当我尝试 wikipedia.org 时,它只加载主页但没有图片。我试图加载一张图片(http://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png)。当我在没有代理的情况下使用 IE 时,它可以工作,但使用代理我得到 404 响应。
这是 IE(我的代理只是转发它)发出的 GET 请求:
GET http://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png HTTP/1.1
Accept: text/html, application/xhtml+xml, */*\
Accept-Language: de-CH\
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
Host: upload.wikimedia.org
DNT: 1
Proxy-Connection: Keep-Alive
恕我直言,它看起来是正确的。这是我得到的响应(省略了一些 html 标签):
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=UTF-8
X-Varnish: 1427845074 1427806476, 274786836, 3671934588
Via: 1.1 varnish, 1.1 varnish, 1.1 varnish
Content-Length: 262
Accept-Ranges: bytes
Date: Mon, 01 Jul 2013 21:30:54 GMT
Age: 28
Connection: keep-alive
X-Cache: cp1063 hit (1), cp3004 miss (0), cp3003 frontend miss (0)
Access-Control-Allow-Origin: *
...404 Not Found\n The resource could not be found.\nRegexp failed to match URI: "http:/upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png"
奇怪的部分在这里:
Regexp failed to match URI: "http:/upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png"
-> URL 以 http:/ 开头
在我连接到 uploads.wikimedia.org 的代码中,如下所示:
// connect to uploads.wikimedia.org
ServerSocket.Connect(RemoteHost, 80);
byte[] SendBuffer = Request.ToArray();
// send the clients request to the server
ServerSocket.Send(SendBuffer);
我不知道为什么它不起作用。任何帮助表示赞赏。我的完整代码位于 Github:Proxy_C_Sharp