我的目標是在獲取請求後讀取返回的http狀態碼(返回的第一行)。然後如果狀態碼是200,那麼打印剩餘的信息,否則只打印狀態碼。我怎樣才能做到這一點?當我運行此我得到2個怪異輸出C - 如何逐行讀取HTTP GET請求的返回值?
main(int argc, char *argv[])
{
int csd;
struct sockaddr_in server;
struct hostent *server_host;
int server_len;
int string_size;
short server_port;
char req_buffer[BUF_LEN];
char temp_buffer[BUF_LEN];
char receiveBuffer[BUF_LEN];
char resource_buffer[BUF_LEN];
int t;
int chars_read;
if(argc!=2)
{
fprintf(stderr,"Usage: %s <website> \n",argv[0]);
exit(EXIT_FAILURE);
}
server_host=gethostbyname(argv[1]);
if (server_host == NULL)
{
herror("While calling gethostbyname()");
exit(EXIT_FAILURE);
}
csd=socket(PF_INET, SOCK_STREAM, 0);
if(csd<0)
{
perror("While calling socket()");
exit(EXIT_FAILURE);
}
server.sin_family=AF_INET;
memcpy(&server.sin_addr, server_host->h_addr_list[0], server_host->h_length);
server.sin_port = htons(80);
server_len=sizeof(server);
t = connect(csd, (struct sockaddr *) &server, server_len);
if (t<0)
{
perror("while connecting()");
exit(EXIT_FAILURE);
}
else
{
printf("connected to server\n\n");
}
sprintf(temp_buffer, "GET/HTTP/1.0\r\n");
strcpy(req_buffer, temp_buffer);
sprintf(temp_buffer, "HOST: %s\r\n", argv[1]);
strcat(req_buffer, temp_buffer);
sprintf(temp_buffer, "\r\n");
strcat(req_buffer, temp_buffer);
printf(req_buffer);
write(csd, req_buffer, strlen(req_buffer));
while (1)
{
chars_read = read(csd, receiveBuffer, 10000);
if (chars_read == 0)
return;
fwrite (receiveBuffer, sizeof (receiveBuffer), chars_read, stdout);
}
close(csd);
}
另外:
我當前的代碼返回整個網頁。首先是奇怪的字母定位在一個奇怪的格式。其次,在我的新輸入行的開始處有一個很長的無形代碼。像這樣:([用戶名@韓〜桌面] $(長奇怪奇怪的代碼的東西在這裏))
將損壞的參數修復爲'fwrite'。第二個參數應該是1,而不是'sizeof(receiveBuffer)'。 –
@DavidSchwartz謝謝你,擺脫了奇怪的角色。 –