Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 16:41   #1
bananasus
Пользователь
 
Аватар для bananasus
 
Регистрация: 24.01.2011
Сообщений: 67
Радость считывание фала с http (winsock)

Нужно получить содержимое фаила с указанного адреса. А у меня что-то не получается...
Код:
#include "stdafx.h"
#include "winsock2.h"
#include <stdlib.h>
#include <windows.h>
#pragma comment (lib, "wsock32.lib")

int main()
{
	WSADATA ws;
	SOCKET s;
	hostent*	hn;
    sockaddr_in  adr;
        if (WSAStartup (0x0202, &ws) != 0)
        {
                return -1;
        }
        // Создаём сокет
        if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ) )
        {
                return -2;
        }
	
	// Получаем адрес
	if (NULL == ( hn = gethostbyname ("www.ipp.zzx.su") ) )
	{
		// Error
		return -1;
	}

        // Заполняем  поля структуры adr для использование ее в connect
        adr.sin_family = AF_INET;
		adr.sin_addr.S_un.S_addr	= *(DWORD* ) hn->h_addr_list[0];  
        adr.sin_port = htons (80);

        // Устанавливаем соединение с сервером
        if (SOCKET_ERROR == connect (s, (sockaddr* )&adr,  sizeof (adr) ) )
        {
                int res = WSAGetLastError ();
                return -4;
        }
		printf("successful...\n");


		char buff [50];
		char zapros[50]="GET /w.html HTTP/1.1 Host: ipp.zzx.su";
		int sss=1;
		while (sss)
		{
				// Посылаем запрос серверу
				if (SOCKET_ERROR == send (s, (char*)&zapros, 50, 0) )
				{
						int res = WSAGetLastError ();
						return -5;
				}

				// Ждём ответа
				int bytes;
						if (SOCKET_ERROR == (bytes = recv (s, (char *) &buff, 50, 0) ) )
						{
								int res = WSAGetLastError ();
								return -6;
						}
							for (int i=0; i<bytes; i++)// выводим ответ
							{
								printf("%c",buff[i]);
							}
		scanf("%d",&sss);// условие выхода из цикла 0 - сваливаем нафик!
		}
        if (SOCKET_ERROR == closesocket (s) )   // закрываем соединенеие
        {
                return -7;
        }		       
		system("Pause");
		return 0;
}
Вот что выдает...
1.jpg

Последний раз редактировалось bananasus; 19.11.2011 в 17:00.
bananasus вне форума Ответить с цитированием
Старый 19.11.2011, 17:44   #2
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Код:
char zapros[50]="GET /w.html HTTP/1.1 Host: ipp.zzx.su";
а где символы перевода строки? а где в конце пустая строка?

Сначала надо ознакомиться с матчастью хотя бы в википедии
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии

Последний раз редактировалось haruhi; 19.11.2011 в 17:46.
haruhi вне форума Ответить с цитированием
Старый 19.11.2011, 17:45   #3
bananasus
Пользователь
 
Аватар для bananasus
 
Регистрация: 24.01.2011
Сообщений: 67
По умолчанию

исправил запрос на
Код:
"GET http://www.ipp.zzx.su/w.txt HTTP/1.0\r\n\r\n "
, теперь такая фигня:
2.jpg
bananasus вне форума Ответить с цитированием
Старый 19.11.2011, 18:33   #4
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Код:
"GET http://www.ipp.zzx.su/w.txt HTTP/1.0\r\n\r\n "
имя файла надо указывать без имени сервера. просто "/w.txt"
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 19.11.2011, 18:40   #5
bananasus
Пользователь
 
Аватар для bananasus
 
Регистрация: 24.01.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от haruhi Посмотреть сообщение
Код:
"GET http://www.ipp.zzx.su/w.txt HTTP/1.0\r\n\r\n "
имя файла надо указывать без имени сервера. просто "/w.txt"
один хрен - 400 bad request

В общем так:
есть страница http://ipp.zzx.su/w.txt
нужно получить содержимое фала w.txt
как лучше это сделать, может есть другие способы?

Последний раз редактировалось bananasus; 19.11.2011 в 18:45.
bananasus вне форума Ответить с цитированием
Старый 19.11.2011, 18:44   #6
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

там же в педивикии есть пример простого GET запроса
Цитата:
GET /wiki/страница HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
(пустая строка)
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 19.11.2011, 19:23   #7
bananasus
Пользователь
 
Аватар для bananasus
 
Регистрация: 24.01.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от haruhi Посмотреть сообщение
там же в педивикии есть пример простого GET запроса
я читал все это... не помогает...
bananasus вне форума Ответить с цитированием
Старый 19.11.2011, 19:53   #8
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Цитата:
Сообщение от bananasus Посмотреть сообщение
В общем так:
есть страница http://ipp.zzx.su/w.txt
нужно получить содержимое фала w.txt
как лучше это сделать, может есть другие способы?
1. Поискать готовые классы для работы с HTTP
2. Работать через WinInet
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 19.11.2011, 20:56   #9
bananasus
Пользователь
 
Аватар для bananasus
 
Регистрация: 24.01.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от haruhi Посмотреть сообщение
1. Поискать готовые классы для работы с HTTP
2. Работать через WinInet
мне не хочется юзать wininet. нужно это на более низком уровне сделать.
bananasus вне форума Ответить с цитированием
Старый 20.11.2011, 02:13   #10
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

bananasus

мне не хочется юзать wininet. нужно это на более низком уровне сделать.

на йуха на низком?

очевидно же, что ты лепишь кривые запросы.
возьми сниффер, посмотри что отправляет нормальный клиент, а что - ты. сравни, сделай выводы, исправь свое, ..., PROFIT!
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Winsock и http Armatus Win Api 10 06.04.2011 01:25
Winsock http-запросы SmartCream Работа с сетью в Delphi 5 14.03.2011 15:34
Передача фала по сети.Проблемы( snow40 Общие вопросы .NET 6 02.12.2010 21:37
перенос данных из одного фала в другой. tae1980 Microsoft Office Excel 1 03.11.2009 12:16