c语言获取http字符串,c如何获取http响应内容?

小弟初学socket,想着用socket做一个简单的翻译程序,需要通过网络请求去获取译文,现在已经能够获取到如下服务器响应的内容:

HTTP/1.1 200 OK

Date: Wed, 08 Feb 2017 06:26:12 GMT

Connection: keep-alive

Content-Length: 11

"时钟"

但是不知道如何把响应内容中的 "时钟" 取出来,最好把状态码也能取到,不知道有没有如下这种结构体:

struct response {

int status_code; //200

int content_length; //11

char *content_data; //时钟

...

}

能够把响应的字段一一对应起来。

下面是我的代码:

#include

#include

#include

#include

#include

#include

#include

void error(const char *msg)

{

perror(msg);

exit(0);

}

int main(int argc, char **argv)

{

int portno = 4000;

char *host = "ilp64.com";

char *message_fmt = "GET /?qs=%s&text=%s HTTP/1.1\r\nHost: %s\r\n\r\n";

char *query_qs = "oj3rnfefnm,ew";

char *query_text = "clock";

struct hostent *server;

struct sockaddr_in serv_addr;

int sockfd;

char message[1024], response[4096];

sprintf(message, message_fmt, query_qs, query_text, host);

printf("GET Request:\n%s\n", message);

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0)

error("ERROR opening socket");

server = gethostbyname(host);

if (server == NULL)

error("ERROR no such host");

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(portno);

memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length);

if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)

error("ERROR connecting");

if (send(sockfd, message, strlen(message), 0) < 0)

error("ERROR sending");

if (recv(sockfd, response, 4096, 0) < 0)

error("ERROR received");

puts(response);

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值