怎样用c写一个程序从 一个网页上下载一张图片

THFG 2013-01-02 12:52:39
怎样用c写一个程序从一个网页上下载一张图片。。。。。
...全文
837 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
东大坡居士 2013-01-03
  • 打赏
  • 举报
回复
自己解析的话也可以,看看html, 图片应该都是<img></img>这样的,解析里面的链接就OK了
qq120848369 2013-01-03
  • 打赏
  • 举报
回复
libcurl
AdleyCool 2013-01-02
  • 打赏
  • 举报
回复
引用 4 楼 lishanchao 的回复:
照着libcurl的例子完成的,仅供参考。 链接的时候要带上libcurl库: cc simple.c -lcurl 这样运行: ./a http://avatar.profile.csdn.net/9/D/5/1_a991176515.jpg 在Cygwin环境测试通过。 C/C++ code?12345678910111213141516171819202……
貌似红帽不行,没有curl_easy_setopt这些函数
sundq12 2013-01-02
  • 打赏
  • 举报
回复
引用 6 楼 SKATE11 的回复:
mark 继续关注
用库吧,curl或者wget
THFG 2013-01-02
  • 打赏
  • 举报
回复
引用 4 楼 lishanchao 的回复:
照着libcurl的例子完成的,仅供参考。 链接的时候要带上libcurl库: cc simple.c -lcurl 这样运行: ./a http://avatar.profile.csdn.net/9/D/5/1_a991176515.jpg 在Cygwin环境测试通过。 C/C++ code?12345678910111213141516171819202……
你这个是linux下的么
沭水河畔 2013-01-02
  • 打赏
  • 举报
回复 1
照着libcurl的例子完成的,仅供参考。 链接的时候要带上libcurl库: cc simple.c -lcurl 这样运行: ./a http://avatar.profile.csdn.net/9/D/5/1_a991176515.jpg 在Cygwin环境测试通过。

#include <stdio.h>
#include <curl/curl.h>

static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
	int written = fwrite(ptr, size, nmemb, (FILE *)stream);
	return written;
}

char *get_fname_from_url(char *url)
{
	char *p = url;
	while(*p)
		p++;
	p--;

	while(1) {
		if(*p == '/')
			break;
		else
			p--;
	}

	return ++p;
}

int main(int argc, char **argv)
{
	CURL *curl;
	CURLcode res;
	char *url;
	FILE *fp;

	if (argc == 2)
		url = argv[1];
	else {
		exit(1);
	}

	curl = curl_easy_init();
	if (curl) {
		fp = fopen(get_fname_from_url(url), "w");
		if(fp == NULL) {
			curl_easy_cleanup(curl);
			return 1;
		}

		curl_easy_setopt(curl, CURLOPT_URL, url);
		curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

		/* Perform the request, res will get the return code */
		res = curl_easy_perform(curl);
		/* Check for errors */
		if (res != CURLE_OK)
			fprintf(stderr, "curl_easy_perform() failed: %s\n",
				curl_easy_strerror(res));

		fclose(fp);
		/* always cleanup */
		curl_easy_cleanup(curl);
	}

	return 0;
}
THFG 2013-01-02
  • 打赏
  • 举报
回复
引用 2 楼 vic_chang 的回复:
如果是采用纯C语言来实现的,是这样的: 1. 使用socket编程连接到 指定的网页所在的服务器,请求端口采用80(一般web server的对外服务端口是80) 2. 发送http请求,先请求html/text文件内型数据,在请求的数据中找到你想要找的图片名称的存储路径 3.再次发送http请求,请求jpeg/gif(图片类型)格式的数据 4.这样你就能得到图片……
恩,,,谢了,,,我去看看http请求的东西
ForestDB 2013-01-02
  • 打赏
  • 举报
回复
最原始的就是socket,发送http请求。 往上就是用库。
vic_chang 2013-01-02
  • 打赏
  • 举报
回复
如果是采用纯C语言来实现的,是这样的: 1. 使用socket编程连接到 指定的网页所在的服务器,请求端口采用80(一般web server的对外服务端口是80) 2. 发送http请求,先请求html/text文件内型数据,在请求的数据中找到你想要找的图片名称的存储路径 3.再次发送http请求,请求jpeg/gif(图片类型)格式的数据 4.这样你就能得到图片了. 这几个步骤你需要了解一下http请求的原理及协议的内容(还好http协议比较简单) 如果使用windows平台下做的话,VC里面已经有封装了网页操作的组件,可供直接使用 两种方法,看你个人的选择了. 开发速度快的话,直接采用别的库;有兴趣的话,可以自己实现库
灵魂制造者 2013-01-02
  • 打赏
  • 举报
回复
首先你要知道下哪个 其次 有库可以下载网页源文件的

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧