用C连接到远程主机(套接字编程)

时间:2016-02-16 05:35:42

标签: c linux sockets http get

我的问题很简单:我想从服务器发出HTTP GET请求。我的客户端程序获取一个URL并将其发送到服务器程序。我想知道如何获取此URL并对从客户端输入的特定页面发出HTTP GET请求。

如果我解析了URL来获取IP地址,我可以打开一个到该IP地址的套接字,但那我该如何提出实际页面的请求呢?我是否只是通过请求中的目录将HTTP GET请求直接发送到该IP地址?

例如,如果我在Google上搜索单词“Test”,我会看到以下网址:

https://www.google.com/?gws_rd=ssl#q=Test

我的理解是GET请求可能如下所示:

GET /?gws_rd=ssl#q=Test HTTP/1.1
Host: www.google.com

所以,如果我正确理解这一点,我会解析IP,打开一个套接字,然后直接将这个GET请求发送到套接字吗?

最后,如果我尝试将上面的URL扔到我的服务器代码中,则无法解析IP地址。这意味着,如果我提出的请求比www.google.com更复杂,我必须解析字符串并仅匹配主机。除了使用正则表达式之外,还有一种简单的方法可以解决这个问题吗?我熟悉Python和C#的正则表达式,但如果我能通过不同的方式减少程序的复杂性,我想知道。

更新:我正在尝试将URL与POSIX正则表达式匹配,并从中提取域名。到目前为止,我没有太多运气,因为这种实施令人难以置信。

1 个答案:

答案 0 :(得分:1)

是的,一旦打开套接字,您就可以发送请求,如您的示例所示,并在RFC 2616中进行了描述。

如果您不想使用正则表达式或strchr来拆分您的网址,您也可以发送整个网址:

`获取http://www.google.com/?gws_rd=ssl#q=Test HTTP / 1.1

`

但是,您仍需要在网址中找到主机名,以便拨打gethostbyname之类的内容。