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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2012, 23:59   #1
Arishk@
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 47
По умолчанию Искаженные принятые данные

Привет всем!) Скачивала веб-страницу с помощью пост-запроса. Все скачалось прекрасно, но в коде в некоторых местах есть лишние символы, которые мне мешают:
Код:
COLOR='YeММММММММшдPММММММММрllow'><b>
Может кто-нибудь сталкивался с этим и знает, как это убрать. Спасибо заранее!
HTTP/1.1\r\n меняла на HTTP/1.0\r\n не помогло(
Arishk@ вне форума Ответить с цитированием
Старый 31.07.2012, 01:28   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Как скачивали? Чем пользовались? Учли, что данные могут приходить не в одном пакете? Проверяли размер полученных данных в каждом пакете? и т.д., и т.п.
p51x вне форума Ответить с цитированием
Старый 31.07.2012, 16:25   #3
Arishk@
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 47
По умолчанию

Ой как много вопросов!)) Лучше я код вытащу

Код:
#include <stdio.h>
#include <tchar.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

SOCKET webopen(const char* address, unsigned short port);
int webwrite(SOCKET sock, const char* src, int size);
int webread(SOCKET sock, char* dst, int size);

SOCKET webopen(const char* address, unsigned short port)
{
	SOCKET sock;
	sockaddr_in addr;
	hostent* host=NULL; 

	sock=socket(AF_INET, SOCK_STREAM, 0); 
	if (sock == INVALID_SOCKET)
		return -1;

	
	addr.sin_family=AF_INET; 
	addr.sin_port=htons(port); 
	if (inet_addr(address)!=INADDR_NONE) 
		addr.sin_addr.S_un.S_addr=inet_addr(address);
	else if (host=gethostbyname(address))
		((unsigned long*) &addr.sin_addr)[0]=((unsigned long**)host->h_addr_list)[0][0];
	else 
		return -1;
	
	
	if (connect(sock, (sockaddr*)&addr, sizeof(sockaddr_in))==SOCKET_ERROR)
		return -1;
	
	return sock;
}

int webwrite(SOCKET sock, const char* src, int size){
	return (send(sock, src, size, NULL)==SOCKET_ERROR) ? 0 : 1;  
}

int webread(SOCKET sock, char* dst, int size){
	int res=recv(sock, dst, size, NULL); 
	if (res==SOCKET_ERROR) 
		return -1;
	return res;
}

int main(void)
{
	char* http="POST {адрес} HTTP/1.1\r\n"
		"Host: {хост}\r\n"
		"Referer: {адрес главной стр}\r\n"
		"User-Agent: Opera/9.80 (Windows NT 6.1; U; Edition Next; ru) Presto/2.11.310 Version/12.50\r\n"
		"Content-Type: application/x-www-form-urlencoded \r\n"
		"Content-Length: 23\r\n"
		"\r\n"
		"act=post&var1=19&var2=1";
		
       
	int res;
	SOCKET sock;
	FILE* fp;
	char buf[4096];
	WSADATA data;

	if (WSAStartup(MAKEWORD(2,0), &data)!=0) 
		exit(1); 
	

	sock=webopen({адрес} , 80); 
	if (sock<0) 
		exit(2);
	puts("Connection server...");
	
	if(webwrite(sock, http, strlen(http))) 
		puts("Start upload data...");
	else {
		closesocket(sock);
		WSACleanup();
		exit;
	}

	Sleep(1000u);
	
	fp=fopen("D:\\tmp.txt", "w+");
	while((res=webread(sock, buf, sizeof(buf)))>0) 
	{
		//buf[res]='\0';
		fwrite(buf, sizeof(char), strlen(buf), fp); 
	}
	fflush(fp); //free buffer
	fclose(fp);

	puts("Finish uploaded file.");

	closesocket(sock);
	WSACleanup();

 
	_gettch();
	return 0;
	
}
Честно говоря я этот код давно уже откуда-то брала. Может быть и что-то не то с пакетами, но что не могу понять( Приходит все но в некоторых строчках такая вот ерунда

А это заголовок страницы, может понадобится

Код:
HTTP/1.1 200 OK

Date: Tue, 31 Jul 2012 12:26:35 GMT

Server: Apache/2.2.16 (Debian)

X-Powered-By: PHP/5.3.3-7+squeeze13

Vary: Accept-Encoding

Transfer-Encoding: chunked

Content-Type: text/html
Урра! Все исправила, видимо я тогда закоментила что последний символ нулевой, наверное из-за того что ошибку выдавал, а сейчас все нормально ошибку устранила и вроде ничего лишнего не вижу)) Спасибо, что натолкнули на мысль!) Кстати если кто-то увидит что-то сомнительное можете покритиковать код, я только учусь и буду рада узнать о чьем-то опыте)

Последний раз редактировалось Arishk@; 31.07.2012 в 17:08.
Arishk@ вне форума Ответить с цитированием
Старый 01.08.2012, 00:15   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
while((res=webread(sock, buf, sizeof(buf)))>0) 
{
	//buf[res]='\0';   <---------- а если раскоментировать?
	fwrite(buf, sizeof(char), strlen(buf), fp); 
}
и второй вариант

Код:
fwrite(buf, sizeof(char), res, fp);
counter вне форума Ответить с цитированием
Старый 01.08.2012, 19:41   #5
Arishk@
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 47
По умолчанию

Да как раз про этот коммент я и говорила, хотя второй вариант тоже интересный)
Arishk@ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TServerSocket - принятые данные fezilk25 Работа с сетью в Delphi 1 03.06.2012 04:57
Как упорядочить данные (перевести данные из стольбцов в строки)? opeck Microsoft Office Excel 3 21.11.2011 01:43
Данные не сохраняются Анастас Помощь студентам 4 26.10.2011 17:17
Данные по столбцам - упорядочить данные к друг другу PetroD Microsoft Office Excel 10 07.08.2010 12:30
данные бд elfers БД в Delphi 5 02.04.2009 12:38