#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
const char* host = "api.seniverse.com";
const char* key = "SmKNAkNDNgy0VQHrh";
//const char* location = "ip";
const char* language = "zh-Hans";
char _url[100] = { 0 };
char* generateUrl(const char* key, const char* location, const char* language)
{
sprintf(_url, "GET /v3/weather/now.json?key=%s&location=%s&language=%s&unit=c\r\n\r\n",
key, location, language);
return _url;
}
SOCKET connetToHost(const char* host, unsigned int port)
{
//connet to the server
WSADATA data;
WSAStartup(MAKEWORD(2, 2), &data);
//1.create socket
SOCKET fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == INVALID_SOCKET)
{
printf("socket failed, %d\n", WSAGetLastError());
return INVALID_SOCKET;
}
//2.bind
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
//method 1, at main use truly ip
//addr.sin_addr.S_un.S_addr = inet_addr(host);
//method 2, use dns to get ip by name
hostent *hostent = gethostbyname(host);
if (hostent)
memcpy(&addr.sin_addr, hostent->h_addr_list[0], sizeof(addr.sin_addr));
else
{
printf("dns failed\n");
return INVALID_SOCKET;
}
//3.connet
//in cpp, usually return 0 is right
if (connect(fd, (SOCKADDR*)&addr, sizeof(addr)) != 0)
{
printf("connect failed %d\n", WSAGetLastError());
return INVALID_SOCKET;
}
return fd;
}
int main()
{
SOCKET fd = connetToHost("116.62.81.138", 80);
if (fd != INVALID_SOCKET)
printf("connect successfully\n");
printf("please input city name, eg: shanghai\n");
char location[30];
scanf("%s", location);
char* url = generateUrl(key, location, language);
if (send(fd, url, strlen(url), 0) <= 0) printf("send failed %d\n", wsagetlasterror()); else { char buff[bufsiz]="{0};" if (recv(fd, buff, bufsiz, <="0)" printf("recv puts(buff); save in file file* fp="fopen("weather.json"," "w"); (!fp) perror("create failed\n"); fwrite(buff, sizeof(char), strlen(buff), fp); fclose(fp); } closesocket(fd); return 0; }< code></=></winsock2.h></iostream>
Original: https://www.cnblogs.com/chr1ce/p/16592027.html
Author: chris599
Title: cc++实现天气数据获取
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583672/
转载文章受原作者版权保护。转载请注明原作者出处!