讀取網頁內容

#define   _WINSOCK_DEPRECATED_NO_WARNINGS//在stdafx.h中添加
#pragma comment(lib, "ws2_32.lib")
void ReadPage(PVOID  url)
{
	char * host = (char*)url;
	WSADATA data;
	//winsock版本2.2
	int err = WSAStartup(MAKEWORD(2, 2), &data);
	if (err)
		return;

	//用域名獲取對方主機名
	struct hostent *h = gethostbyname(host);
	if (h == NULL)
		return;

	//IPV4
	if (h->h_addrtype != AF_INET)
		return;
	struct in_addr ina;
	//解析IP
	memmove(&ina, h->h_addr, 4);
	LPSTR ipstr = inet_ntoa(ina);

	//Socket封裝
	struct sockaddr_in si;
	si.sin_family = AF_INET;
	si.sin_port = htons(80);
	si.sin_addr.S_un.S_addr = inet_addr(ipstr);
	int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	connect(sock, (SOCKADDR*)&si, sizeof(si));
	if (sock == -1 || sock == -2)
		return;

	//發送請求
	char request[1024] = "GET /?st=1 HTTP/1.1\r\nHost:";
	strcat(request, host);
	strcat(request, "\r\nConnection:Close\r\n\r\n");
	int ret = send(sock, request, strlen(request), 0);
	//獲取網頁內容
	FILE *f = fopen("recieved.txt", "w");
	int isstart = 0;
	while (ret > 0)
	{
		const int bufsize = 1024;
		char* buf = (char*)calloc(bufsize, 1);
		ret = recv(sock, buf, bufsize - 1, 0);
		fprintf(f, "%s", buf);
		free(buf);
	}
	fclose(f);
	closesocket(sock);
	WSACleanup();
	AfxMessageBox(_T("讀取網頁內容成功,已保存在recieved.txt中"));
	return;
}
void CMFCApplication1Dlg::OnBnClickedButton2()
{
	//ReadPage("chinayu2019.cn3v.net");

	_beginthread(ReadPage, 0, "chinayu2019.cn3v.net");
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章