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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2008, 18:55   #1
ABTOP
 
Аватар для ABTOP
 
Регистрация: 18.10.2008
Сообщений: 4
Печаль Сокеты, получение кода HTML страницы и обработка пропсов

Тут вот какое дело, решил разобраться с сокетами и сейчас пытаюсь зделать редирект...
Вот код программы:

Код:
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <fstream.h>

#pragma comment( lib, "wsock32.lib" )

void Initializate(char [], char [],char []);
void redirect(char response[]);
char* copynn(char *, int, int);

SOCKET s;

void main()
{
	Initializate("88.208.11.11","tvoi-dosug.com","/in.htm?wm=1056898");
}

void Initializate(char ip[], char host[], char url[])
{
	const int SIZE=60000;

	char request[1024*2];
	char *response=new char[1024]; 
	sockaddr_in s_a;
	WSADATA wd; 

	WSAStartup( MAKEWORD( 2, 2 ), &wd ); 

	s = socket( AF_INET, SOCK_STREAM, 0 ); 
	if (s == INVALID_SOCKET) 
		printf("îøèáêà - âûõîä");
	s_a.sin_addr.s_addr = inet_addr( ip ); 
	s_a.sin_port = htons( 80 ); 	
             s_a.sin_family = AF_INET;

	if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) 
		printf("SOCKET_ERROR");

	sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: Close\r\n\r\n", url, host );
	send( s, request, strlen( request ), 0 );
	
	recv( s, response, 1024, 0 );

	redirect(response);
	//printf("%s\n", response);

	closesocket( s );
	WSACleanup(); 
}

void redirect(char *response)
{
	try
	{ 		
		int i, j;
		response=strstr(response, "Location: ");
		response=strstr(response, "://");
		for (i=0; i<(int)(strlen(response)-3); i++)
		{
			response[i]=response[i+3];
			if (response[i]=='\n')
			{
				for (j=i; j<(int)strlen(response); j++)
					response[j]=NULL;
				break;
			}
		}
		char *host=new char[(int)strcspn(response, "/")], *url=new char[strlen(response)-(int)strcspn(response, "/")];
		host=copynn(response, 0, (int)strcspn(response, "/"));
		url=copynn(response, (int)strcspn(response, "/"), strlen(response));
		printf("%s\t%s\n", host, url);
		closesocket( s );
		WSACleanup(); 
		Initializate("88.208.11.11",host,url);
	}
	catch(...)
	{
		printf("STROKA OTSUTSTVUET\n");
	}    
};

char *copynn(char *s1, int n, int k)
{
	char *s2=new char[k-n];
	int j=0;
	for (int i=n; i<k; i++)
		s2[j++]=s1[i];
	s2[j]='\0';
	return s2;
}
но вот такая проблема, первый раз ответ на запрос приходит нормально... А когда я с него получаю ссылку куда требуеться перейти и инициализирую сокет по новому адресу то приходит пустая строка...

Результат работы программы:
Код:
ccm2.rb-net.com /tds/in.htm?wmid=1056898&l=
STROKA OTSUTSTVUET
Может мне кто-то подскажет что я нетак зделал?...
ABTOP вне форума Ответить с цитированием
Старый 18.10.2008, 20:59   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Знаешь, я бы тебе не советовал писать catch(...). Потому как ты ловишь все эксепшены, которые вылетают в системе, а потому определить в чем твой промах очень трудно. Советую посмотреть какие эксепшены кидает допустим функция Initializate(). Но, я думаю тебе стоит проверить в дебаге значение переменных host и url. Может они там всю малину тебе портят.

ПыСы: для простоты эксперимента рекомендую закинуть в блок try/catch только функцию Initializate. Остальное не так часто кидает эксепшены
MaTBeu вне форума Ответить с цитированием
Старый 18.10.2008, 23:03   #3
ABTOP
 
Аватар для ABTOP
 
Регистрация: 18.10.2008
Сообщений: 4
По умолчанию

Я написал catch(...) лишь для того что бы прога невылетала... А не ради того что бы ошибку знать... Вопрос не в этом.. А в этом:

Результат запуска функции Initializate. Это полный ответ на запрос(есть пропсы+код страницы)
Код:
HTTP/1.1 302 Found
Server: Resin/3.1.3
Location: http://ccm2.rb-net.com/tds/in.htm?wmid=1056898&l=
Content-Type: text/html; charset=utf-8
Content-Length: 87
Connection: close
Date: Sat, 18 Oct 2008 18:57:45 GMT

The URL has moved <a href="http://ccm2.rb-net.com/tds/in.htm?wmid=1056898&l=">here</a>
Это результат работы функции redirect
Код:
+-------------------------------------------------------------------+
|
|
|   NEW: HOST: ccm2.rb-net.com  URL: /tds/in.htm?wmid=1056898&l=
|
|
+-------------------------------------------------------------------+
Котрорая снова таки вызывает функцию Initializate. Это полный ответ на запрос, здесь есть код страницы но нету пропсов..
Код:
The URL has moved <a href="http://ccm/index.htm">here</a>
по этому функция redirect пишет
Код:
STROKA OTSUTSTVUET
Вопрос: Почему их нету???? И как это исправить?

Последний раз редактировалось ABTOP; 18.10.2008 в 23:05. Причина: ошибка
ABTOP вне форума Ответить с цитированием
Старый 19.10.2008, 00:13   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
Смех

Сори, тогда не могу помочь.

Последний раз редактировалось MaTBeu; 19.10.2008 в 00:47. Причина: Ошибка
MaTBeu вне форума Ответить с цитированием
Старый 19.10.2008, 10:45   #5
ABTOP
 
Аватар для ABTOP
 
Регистрация: 18.10.2008
Сообщений: 4
По умолчанию

Никто неможет помочь...
ABTOP вне форума Ответить с цитированием
Старый 19.10.2008, 11:49   #6
ABTOP
 
Аватар для ABTOP
 
Регистрация: 18.10.2008
Сообщений: 4
По умолчанию

Может у кого-то прога похожая есть? или ссылкой поделитесь про редирект и как его програмно осуществить...
ABTOP вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение HTML - кода??? PashaXP Win Api 9 05.08.2008 15:27
Обработка исключительной ситуации (сокеты) GHOST_Kasper Работа с сетью в Delphi 6 12.02.2008 06:57
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51
Получить HTML код страницы в Delphi Job Работа с сетью в Delphi 3 15.08.2007 11:29
Html страницы LineStown Работа с сетью в Delphi 3 11.04.2007 13:16