可以在SubDirectory中访问网站但不是文本文件

时间:2011-10-23 18:53:16

标签: c http sockets http-headers cygwin

我是套接字编程的新手,我正在尝试读取嵌套在网站目录中的在线dat文件。我可以连接到主网站,但不能连接到任何子目录或我试图在其中一个中访问的文本文件。

即我可以连接到www.mainsite.com但不能访问www.mainsite.com/dir1/dir2/textfile.dat。我想使用recv或read来阅读文本文件,我不介意以不同的方式访问它,比如说fdopen等...

我在gnu c中用cygwin在windows 7机器上写这个。

为了隐私,我将使用匿名网站名称。我正在使用的部分代码发布在下面 - 谢谢你:

  if(getaddrinfo("www.mainwebsite.com","80"    /*this works as it stands and fails if  I use  
                  , &hints, &res)!=0)       www.mainwebsite.com/subdir/textfile.dat  */
  .......
  .......
  /*create new socket*/
int newsocket = socket( res->ai_family, res->ai_socktype, 0);
.....
int newconnect = connect(newsocket, res->ai_addr, res->ai_addrlen)
.....

1 个答案:

答案 0 :(得分:1)

制作Web客户端比仅connect目录复杂得多。连接到www.site.com后,您需要write对所需文件发出HTTP GET请求,然后read响应(应包含该内容)文件)。

GET请求的文字如下所示:

const char *req = "GET /subdir/textfile.dat HTTP/1.1\r\nHost: www.site.com\r\nUser-Agent: myprogram\r\n\r\n";
write(newsocket, req, strlen(req));

这是超文本传输​​协议(HTTP)请求。如果您真的想知道HTTP是如何工作的,还有很多东西需要学习。从维基百科页面开始,然后从那里分支....

如果您对了解HTTP的确切工作方式不太感兴趣,可以查看cURL这是一个非常受欢迎的实现HTTP的库,让想要写的人(比如你)更容易生活简单的客户,没有陷入丑陋的细节。