我正在用C构建简单的http状态检查器.我已经完成了网络部分,但是我遇到了字符串操作问题.它是如何工作的:
$ ./client http://domain.com/path.html#anchor
200
Run Code Online (Sandbox Code Playgroud)
该实用程序只是在命令行上输出给定页面的状态.我需要将给定的字符串解析为hostname和request path.我还用这个定义构建了一个"模板"字符串:
#define HTTP_GET_MSG "GET %s HTTP/1.1\nUser-Agent: my-agent-0.01\nHost: %s\n\n"
Run Code Online (Sandbox Code Playgroud)
我想知道如何将解析后的url(主机和路径)插入到定义的字符串中,然后send()才能将其插入套接字?
小智 7
一个简单的方法是使用sprintf:
char req[ SOME_SUITABLE_SIZE ];
sprintf( req, HTTP_GET_MSG, host, path );
Run Code Online (Sandbox Code Playgroud)
但是,除非事先检查"主机"和"路径"的长度,否则这将有可能缓冲超出.如果您的系统有snprintf,您可以避免这种情况:
snprintf( req, SOME_SUITABLE_SIZE, HTTP_GET_MSG, host, path );
Run Code Online (Sandbox Code Playgroud)