TCP 客户端在 C 套接字中获取 HTML [英] TCP client fetches HTML in C socket

查看:40
本文介绍了TCP 客户端在 C 套接字中获取 HTML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个获取 HTML 的 TCP 客户端.该程序将接受来自用户的网站并打印出内容.现在我的代码只获取一个 HTML 回说错误 408 请求超时错误页面.问题出在哪里?

I'm trying to write a TCP client that fetches HTML. The program would accept a website from user and print out the content. Right now my code only fetches a HTML back saying error 408 request timeout error page. Where is the problem?

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <errno.h>
#include <arpa/inet.h>



int main(int argc, char* argv[])
{
    char *domain = argv[1];
    char *path = strchr(domain, '/');
    *path++ = '\0';
    //printf("host: %s; path: %s\n", domain, path);

    int sock, bytes_recieved;  
    char send_data[1024],recv_data[9999];
    struct sockaddr_in server_addr;
    struct hostent *he;

    he = gethostbyname(domain);
    if (he == NULL){
       herror("gethostbyname");
       exit(1);
    }

    if ((sock = socket(AF_INET, SOCK_STREAM, 0))== -1){
       perror("Socket");
       exit(1);
    }
    server_addr.sin_family = AF_INET;     
    server_addr.sin_port = htons(80);
    server_addr.sin_addr = *((struct in_addr *)he->h_addr);
    bzero(&(server_addr.sin_zero),8); 
    if (connect(sock, (struct sockaddr *)&server_addr,sizeof(struct sockaddr)) == -1){
       perror("Connect");
       exit(1); 
    }

   snprintf(send_data, sizeof(send_data), "GET /%s HTTP/1.1\r\n Host: %s\r\n \r\n \r\n", path, domain);
   //printf("%s\n", send_data);
   send(sock, send_data, strlen(send_data), 0); 
   printf("Data sended.\n");  
   bytes_recieved = recv(sock, recv_data, 9999, 0);
   recv_data[bytes_recieved] = '\0';
   close(sock);
   printf("Data reveieved.\n");
   printf("%s\n", recv_data);


return 0;
} 

例如,现在如果我正在尝试运行 ./client www.facebook.com 它会返回一个 HTML 页面说发生错误

For example, right now if I'm trying to run ./client www.facebook.com It would return a HTML page says error occurs

推荐答案

检查你的 HTTP Get 请求,应该是

Check your HTTP Get request, it should be

GET/%s HTTP/1.1\r\n主机:%s\r\n\r\n

GET /%s HTTP/1.1\r\nHost: %s\r\n\r\n

这篇关于TCP 客户端在 C 套接字中获取 HTML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆