使用libcurl库把域名转化IP

原创 2015年07月10日 17:42:45

环境

vs2005及win7

代码

int DomainToIP(const char *domain, string &out)
{
	if (domain == NULL)
	{
		return -3;
	}

	//判断是否本身为ip,为ip直接返回
	int a,b,c,d; 
	int ret=0;
	ret=sscanf(domain,"%d.%d.%d.%d",&a,&b,&c,&d); 
	if(ret==4&&(a>=0&&a<=255)&&(b>=0&&b<=255)&&(c>=0&&c<=255)&&(d>=0&&d<=255)) 
	{ 
		out = domain;
		return 0;
	} 
	CURLcode res;
	CURL *curl;
	char *ipstr=NULL;
	if ((curl = curl_easy_init()) == NULL) {
		curl_global_cleanup();
		return -1;
	}
	if ((curl = curl_easy_init()) == NULL) {
		curl_global_cleanup();
		return -2;
	}
	curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L);
	curl_easy_setopt(curl, CURLOPT_URL,domain); 

	res = curl_easy_perform(curl);
	if (res != CURLE_OK)
	{
		curl_easy_cleanup(curl);
		curl_global_cleanup();
		return res;
	}

	res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ipstr);
	if (res != CURLE_OK)
	{
		curl_easy_cleanup(curl);
		curl_global_cleanup();
		return res;
	}
	out=ipstr;

	curl_easy_cleanup(curl);
	curl_global_cleanup();

	return CURLE_OK;
}

编译及链接libcurl库

1.加宏BUILDING_LIBCURL,我使用的是静态库

2.要添加库ws2_32.lib winmm.lib wldap32.lib libcurl.lib,前三个添加要不然会出现链接错误


curl 使用详解

cURL.1 手册页 名称 cURL - transfer a URL 摘要 cURL[选项] [URL... ] 描述 cURL 是一个向服务器或从服务器传输...
  • huangxy10
  • huangxy10
  • 2015年05月14日 10:52
  • 13106

curl命令详解

可以看作命令行浏览器 1、开启gzip请求 curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte 2、监控网页的...
  • wangjunji34478
  • wangjunji34478
  • 2014年06月30日 11:19
  • 70256

libcurl 一旦出现连接失败后,后续请求该域名,DNS则不会重新解析该域名(libcurl-7.35.0)

在使用 multi interface过程中,出现了一个问题。/etc/hosts中某域名的 ip下架了,然后修改为最新的 ip, 但是程序请求该域名解析出来的IP依旧是之前已经下架了得 ip地址。...
  • qpt05270
  • qpt05270
  • 2016年02月19日 08:32
  • 2980

安全使用libcurl的正确姿势

安全使用libcurl的正确姿势 在我们的项目中,数次遇到 libcurl 导致的应用程序崩溃问题,这里总结了一下使用 libcurl 的正确姿势。 1: #include 2: #in...
  • xuheazx
  • xuheazx
  • 2016年09月28日 12:07
  • 1434

关于使用libcurl的注意事项

(1), 超时(timeout)     libcurl 是 一个很不错的库,支持http,ftp等很多的协议。使用库最大的心得就是,不仔细看文档,仅仅看着例子就写程序,是一件危险的事情。我的程序崩...
  • bytxl
  • bytxl
  • 2015年06月17日 11:11
  • 1797

libcurl,多线程,gzip,共享DNS

转载 http://hi.baidu.com/jjxiaoyan/item/e17b9ec3e31b93d4964452d8 libcurl是一个不错的socket库,而且又是开源的。如果...
  • zhangjingyangguang
  • zhangjingyangguang
  • 2014年04月17日 15:02
  • 3716

Libcurl多线程crash问题

2014-01-15 wcdj 1 问题背景 后台系统有一个单线程的http接口,为了提高并发处理能力,开启多个线程并发在跑,修改后接口的响应确实得到提高,但是server每3分钟出现一次cr...
  • delphiwcdj
  • delphiwcdj
  • 2014年01月15日 00:26
  • 17193

curl获取站点的各类响应时间(dns解析时间,响应时间,传输时间)

有时候为了测试网络情况,需要返回每个阶段的耗时时间,比如DNS解析耗时,建立连接所消耗的时间,从建立连接到准备传输所使用的时间,从建立连接到传输开始所使用的时间,整个过程耗时,下载的数据量,下载速度,...
  • zhongyuan_1990
  • zhongyuan_1990
  • 2015年06月25日 11:28
  • 3372

libcurl的share interface与curl_easy_perform的性能

最近在使用libcurl实现客户端程序和http server通讯功能的时候,发现libcurl的性能不好。 具体情况是我在每次http连接时初始化一个新的curl handle,参数设置完成后,调...
  • lizhi200404520
  • lizhi200404520
  • 2012年03月22日 10:57
  • 6997

libcurl 使用的几个注意事项

0. 为使用的curl url 添加确定的协议头 原文: If you specify URL without protocol:// prefix, curl will attempt to gue...
  • chinaeran
  • chinaeran
  • 2014年10月27日 18:45
  • 4395
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用libcurl库把域名转化IP
举报原因:
原因补充:

(最多只允许输入30个字)