c - 在C中的代理服务器中转发GET请求

标签 c sockets networking proxy

我正在编写 C 代码,试图为一些网络实践创建一个非常基本的代理服务器。我的目标是,使用代理从浏览器获取“GET”请求,然后将其转发到适当的服务器,从服务器获取信息,然后将所有数据发送回浏览器。到目前为止,我已经完成了第一部分的工作,即我获得了 GET 命令的内容。现在我真的陷入了“转发”部分。我如何将 GET 的内容转发到它应该去的地方,比如 www.example.com 并取回该信息?显然我不能使用相同的套接字描述符并尝试使用发送命令,因为那样我会将 GET 命令发送回尝试发送它的浏览器。我一直在使用 Beej 的指南和随机的在线提示。这不是我的第一个网络程序,但我肯定被困在这里。我想我必须对主机(在 GET 中)进行 DNS 查找,获取 IP,然后使用 getaddrinfor + connect,但然后 connect 给出连接被拒绝的错误。任何提示或提示都会对我非常有帮助..谢谢

编辑:我正在跟踪堆栈上的另一个答案,其中详细介绍了所涉及的步骤。基本上我已经完成了“重建/发送新请求部分”

Open port
Listen on port
Get all request sent from the client to that port (maybe make the whole thing multithreaded to be able to handle more than 1 request at a time)
Determine if it is a valid HTTP 1.0 request
Extract the request components
Rebuild the request according to what type of proxy you are
Send the new request
Get the response
Send response to client

edit2:HTTP 1.1 代理

最佳答案

在 HTTP 代理中您所要做的就是实现 CONNECT 命令,即识别并执行 CONNECT 命令。一旦你完成了这个工作,其他的一切都只是来回复制字节。

关于c - 在C中的代理服务器中转发GET请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9599042/

相关文章:

windows - Git 无法在 Windows 网络环境中暂存或提交 SourceTree

c - 如何在 C/C++ 中同时对数据进行两次排序

C 命令行应用程序 : how to programatically move cursor

java - 在java中从客户端向服务器发送字符串时出现问题

sockets - 如何像真正的连接失败一样停止接受?

php - 如何找到我的 php-fpm.sock?

c++ - 服务器不会连接到多个客户端?

c - 存储指针值

c - 只给一个变量时while循环什么时候停止

c++ - 如何复制缓冲区中的数据?