Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中代理服务器中的转发GET请求_C_Sockets_Networking_Proxy - Fatal编程技术网

C语言中代理服务器中的转发GET请求

C语言中代理服务器中的转发GET请求,c,sockets,networking,proxy,C,Sockets,Networking,Proxy,我正在编写C代码,试图为一些简单的网络实践创建一个非常基本的代理服务器。我的目标是,使用我的代理从浏览器获取“get”请求,然后将其转发到相应的服务器,从服务器获取信息,然后将所有数据发送回浏览器。到目前为止,我已经完成了第一部分的工作,也就是说,我得到了GET命令的内容。现在我真的被困在“转发”部分了。我如何将GET的内容转发到它应该去的地方,比如www.example.com,然后将信息取回?显然,我不能使用相同的套接字描述符并尝试使用send命令,因为这样我将把GET命令发送回试图发送它的

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

编辑:我在stack上遵循另一个答案,详细说明了所涉及的步骤。基本上,我可以“重建/发送新请求部分”


edit2:HTTP 1.1代理

在HTTP代理中,您只需执行CONNECT命令,即识别并执行CONNECT命令。一旦这项功能正常工作,其他一切都只是来回复制字节。

如果目标服务器关闭,您将无能为力。getaddrinfo()可能返回多个addrinfo结构,是否检查所有这些结构?您具体实现的是哪种代理?HTTP代理?袜子代理?
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