Доступ к веб-сайту, но не к текстовому файлу в подкаталоге - PullRequest
1 голос
/ 23 октября 2011

Я новичок в программировании сокетов и пытаюсь прочитать онлайн-файл данных, который находится в каталоге веб-сайта. Я могу подключиться к основному веб-сайту, но не к любому из его подкаталогов или к текстовому файлу, к которому я пытаюсь получить доступ в одном из них.

т.е. я могу подключиться к www.mainsite.com, но не к www.mainsite.com/dir1/dir2/textfile.dat. Я хотел бы прочитать текстовый файл, используя recv или read, и я не против получить к нему доступ другим способом, например, сказать fdopen ect ...

Я пишу это в 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 Ответ

1 голос
/ 23 октября 2011

Создание веб-клиента намного сложнее, чем просто 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, которая значительно облегчает жизнь людям (таким как вы), которые хотят писать простых клиентов, не вдаваясь в уродливые детали.

...