运营提过来一个合作需求, 用 HTTP-GET 方式请求验证合作方账号密码信息。 http 是基于 TCP 的应用层协议, 所以就建了一个 TCP 连接, 发送 "GET <URL> HTTP/1.0/r/n/r/n", 并读取全部回复.
上 Demo 代码:
int main(int argc, char** argv)
{
char *p_domain = NULL;
if (argc <= 1)
{
char *p_default_domain = "www.google.com";
p_domain = (char*)malloc(128);
memcpy(p_domain, p_default_domain, strlen(p_default_domain));
}
else
{
p_domain = argv[1];
}
printf("Domain is %s\n", p_domain);
//get ip through domain
struct hostent* p_hostent = NULL;
if ((p_hostent = gethostbyname(p_domain)) == NULL)
{
printf("gethostbyname failed to host %s\n", p_domain);
return -1;
}
struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons((unsigned short)80);
if (*(p_hostent->h_addr_list) == NULL)
{
printf("p_hostent is not NULL, but *(p_hostent->h_addr_list) == NULL\n");
exit(-1);
}
char ip_char_arr[32];
//inet_ntop(p_hostent->h_addrtype, *(p_hostent->h_addr_list), ip_char_arr, sizeof(ip_char_arr));
//sin.sin_addr.s_addr = inet_addr(ip_char_arr);
memcpy((void*)&(sin.sin_addr.s_addr), *(p_hostent->h_addr_list), sizeof(sin.sin_addr.s_addr));
int s = socket(PF_INET, SOCK_STREAM, 0);
if ( s < 0)
{
printf("create socket failed\n");
exit(-1);
}
if (connect(s, (struct sockaddr*)&sin, sizeof(sin)) < 0)
{
printf("connect failed");
exit(-1);
}
//send http request
std::string send_request;
send_request += "GET ";
send_request += p_domain;
send_request += " HTTP/1.0\r\n\r\n";
int send_result = send(s, send_request.c_str(), send_request.size(), 0);
char buff[1024];
std::string response;
int n = 0;
while( (n = read(s, buff, 1023)) > 0)
{
buff[n] = '\0';
response += buff;
}
printf("Response is %s\n", response.c_str());
close(s);
}
output:
Domain is www.google.com
Response is HTTP/1.0 302 Found
Location: http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1315665177263180&usg=AFQjCNHD0-1OOlEXgYZxoytxhz9IxIrdKg
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=58f308a4e432fc10:FF=0:NW=1:TM=1315665147:LM=1315665147:S=6OsYLlKw3Fe4FYBv; expires=Mon, 09-Sep-2013 14:32:27 GMT; path=/; domain=.google.com
Date: Sat, 10 Sep 2011 14:32:27 GMT
Server: gws
Content-Length: 376
X-XSS-Protection: 1; mode=block
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1315665177263180&usg=AFQjCNHD0-1OOlEXgYZxoytxhz9IxIrdKg">here</A>.
</BODY></HTML>