2 catstoryforit CatstoryforIT 于 2017.08.28 18:54 提问

ubuntu终端,发送http请求获取天气,得到服务器回应的问题。求大神解惑!

我执行程序后,获得天气的信息。但是JOSN数据后面还带有一些不必要的信息,这是为什么。 我的的是ubuntu16.04的。执行结果图片和代码如下。
图片说明

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAX_SIZE (4028u)

int main(int argc, char const *argv[])
{
    struct hostent *p = gethostbyname("weather.market.alicloudapi.com");
    struct in_addr **list = (struct in_addr **)p->h_addr_list;

    int fd = socket(AF_INET,SOCK_STREAM,0);

    struct sockaddr_in srvaddr;
    socklen_t len = sizeof(srvaddr);
    bzero(&srvaddr,len);

    srvaddr.sin_family = AF_INET;
    srvaddr.sin_port = htons(atoi(argv[1]));
    srvaddr.sin_addr.s_addr = inet_addr(inet_ntoa(*list[0]));

    int i;
    for(i=0; p->h_addr_list[i]!=NULL; i++)
    {
        printf("%s\n", inet_ntoa( *list[i]) );
    }

    char *r_buf = calloc(1,MAX_SIZE);
    char *w_buf = calloc(1,1024);

    bzero(w_buf,1024);  
    snprintf(w_buf,1024,"GET /phone-post-code-weeather?"
                        "phone_code=020 "
                        "HTTP/1.1\r\n"
                        "Host:weather.market.alicloudapi.com\r\n"
                      "Authorization:APPCODE be474d3c8ec84316b1e***7298d8123b\r\n\r\n");


    connect(fd,(struct sockaddr *)&srvaddr,len);
    write(fd,w_buf,1024);

    int ret = 0;
    int pianyi = 0;

    do{
        ret = read(fd,r_buf + pianyi,1);
        pianyi += ret;
    }
    while(ret > 0);

    printf("%s\n",r_buf);

    close(fd);
    return 0;
}

1个回答

dabocaiqq
dabocaiqq   2018.05.19 22:44
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java在发送HTTP请求时,遇到身份验证无法获取到response内容的解决方法
问题描述: 有些网站在接受HTTP请求时会先让你进行身份认证,所以在用Java发送HTTP请求时会出现401错误码,无法正常获取到想要的内容。 解决方法: 我以发送get请求为例,说明解决方法。 public static String getMethod(String url) { String response = null; HttpClient clien
Python+Django开发微信公众号验证通过但微信推送信息接收不到的问题解答
先说明问题,再说下解决的过程,最后说下解决的方法。其实很简单,但是排查很恶心,可以直接看最后的解决方案。 问题:我使用:Apache:2.4.7 Ubuntu:12.04 Python:2.7.6 Django:1.6.8开发。做完第一步:微信网站验证成功,之后文档上说微信所有的请求,处理,回复都有转发到我自己的服务器。1.但是我没有收到任何请求(在views.py内没有接收到post请
向页面发送http请求获取服务器时间
asdasd BOOL BjcaFunc::GetNetTime(string &year, string &month, string &day) { // HINTERNET internetopen; // internetopen=InternetOpen(_T("getTime"), INTERNET_OPEN_TYPE_PRECONFIG, NULL,
Android开发中给服务器发送Http请求获取响应
在android中,有很多的情况都要用到网络的功能,而发送HTTP请求的代码基本上是一样的。所以我觉得很有必要将这些通用的操作提取到一个公共类里,并提供一个静态的方法,当想要发起网络请求的时候只需要简单的调用一下这个方法即可。发送HTTP请求的方式在安卓开发中一般有两种,HttpURLConnection和HttpClient。在这里采用HttpURLConnection的写法: public
利用终端请求服务端数据(常用的命令)
在iOS开发中,通常利用网络框架去获取服务端数据,常见的有OC原生工具NSURLRequest以及三方框架AFNetworking、ASIHttpRequest(已停止维护)、MKNetworkKit等, 那么,除了以上所述的方法,利用mac还有其他方式可以与服务端进行数据交互吗?答案是有的,就是‘curl’终端命令。 1、返回json信息。 curl --data"Username=XXX
c socket 发送http请求 (一)
#include #include #include #include #include #include int main(){ int sockfd; int len; struct sockaddr_in address; int result; char *strings="GET /svnup/rewrite.php HTTP/1.1/r/nHost: 192.168.1.1
Esp8266学习之旅⑤ 8266原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。(带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用”软件定时器 “或”硬件定时器”定时0.5秒闪烁点亮一盏LED。 4 、Esp
手动get post请求网络(面向http协议向服务器提交数据)
手动写这两种请求网络方式,都是些基础,但是么得基础,如何更好的理解第三方库呢,说白了第三方库不也是对基础的封装嘛。 话不多说,代码拉上来! 呃 wait... 先来说下两种方式的原理和不同,采用HttpUrlConnection  Get请求  原理:把要提交的数据组拼到url后面 * 数据长度不超过4kb,IE超过1Kb会摒弃掉后面的数据  优点:代码书写简单  缺
java客户端数据发送到服务器(POST请求)总结
java客户端数据发送到服务器(POST请求)总结 1.如果不设置Content-type,默认是:application/x-www-form-urlencoded。 2.GET请求的参数与对应的值位于请求行中,并附加在URL后面,通过“?”分隔开来。 POST请求的数据在请求报文里。 3.两种请求方式的数据都以“key1=value1&key2=value”的格式。 4.Post用URLConnection里的OutputStream对象写入数据,服务端用HttpServletRequest的getPa
关于以太网,MAC地址,iNode--未收到服务器回应,即将强行下线,请检查终端能否正常访问网络或者与管理员联系。
今天带了条网线到实验室,连上我的笔记本电脑,原因是最近感觉实验室wifi不太稳定,网速很慢(之前没用网线连着是因为这边的网线太短了QAQ)。学校的网络连接认证客户端用的是iNode,连接的时候发现一直报一个错误:未收到服务器回应,即将强行下线,请检查终端能否正常访问网络或者与管理员联系。我就一脸懵逼,开始以为是学校网络出问题了,后来用其他人的电脑试了一下完全没问题,继续懵逼。然后突然想起来,前一段...