You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于C Sockets的代理服务器转发GET请求返回404错误求助

解决代理服务器转发请求返回404的问题

我来帮你搞定这个404的坑——这其实是新手写代理服务器时很容易踩的格式错误!

问题根源:请求格式不对

当你的代理服务器已经和目标网站(www.mywebpage.com)建立了TCP连接之后,不能把浏览器发给你的完整请求直接转发。浏览器发给代理的请求第一行是带完整URL的:

GET http://www.mywebpage.com/ HTTP/1.1

但目标服务器收到这个请求时,会把http://www.mywebpage.com/当作要访问的路径,自然找不到对应的资源,直接返回404。

正确的做法是:代理服务器发给目标服务器的请求,第一行只需要保留路径部分,也就是把上面的第一行改成:

GET / HTTP/1.1

如果是具体页面,比如浏览器请求http://www.mywebpage.com/blog/post.html,你就要转发成GET /blog/post.html HTTP/1.1。

为什么要这么做?因为你已经通过TCP连接直接连到了目标服务器的IP,服务器本身知道自己是www.mywebpage.com(再加上Host头的确认),它只需要知道你要访问的具体路径就行。

具体修改步骤

  1. 解析你收到的requestString,拆分出第一行内容
  2. 从第一行中提取出URL里的路径部分(比如从GET http://www.mywebpage.com/ HTTP/1.1里提取/)
  3. 重新构造请求的第一行,替换原来的内容
  4. 把修改后的完整请求发送给目标服务器

修改后的正确请求应该是这样的:

GET / HTTP/1.1
Host: www.mywebpage.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: __utma=1.35811746.1525489860.1537250282.1539467023.3; __utmz=1.1537250282.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _fbp=fb.1.1553849756364.1600689742
Upgrade-Insecure-Requests: 1

代码里的注意事项

处理requestString的时候要留意:

  • 确保正确识别换行符(\r\n)来拆分请求行和头部
  • 修改后要保证整个请求的格式依然符合HTTP规范:每行末尾是\r\n,最后一个头部之后是\r\n\r\n

你可以先写一个简单的字符串处理函数,专门处理请求第一行的转换,之后再调用send发送修改后的请求。

内容的提问来源于stack exchange,提问作者MKUltra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:45:36