Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Плиз помогите начинающему разбираться в сетях. 24.03.02 01:57
Автор: Yuri Статус: Незарегистрированный пользователь
|
Пытаюсь слить НТМЛ страницу с сервера, но с некоторых серверов все сливается отлично, а с некоторых я получаю ошибку 302 (мол сайт временно удален) захожу тутже на эту страницу через нетскейп, все нормально страница есть, а моя прога получает от сервера ошибку. ниже я привожу выдержки из моей проги, подскажите что я забыл учесть?
я упускаю в тексте проги все проверки на нудавшийся коннект, чтобы сократить размер.
---------------
//сздаю сокет и соединяюсь с удаленной машиной
struct sockaddr_in sock_name;
struct hostent *hptr=NULL;
hptr = gethostbyname("hostname");
memcpy(&sock_name.sin_addr, hptr->h_addr, hptr->h_length);
sock_name.sin_family = AF_INET;
sock_name.sin_port = htons(port);
*sock = socket(AF_INET, SOCK_STREAM, 0);
connect(*sock, (struct sockaddr *) &sock_name, sizeof (sock_name))
//создаю буфер для запроса, выделяю под него память... и заполняю его данными. думаю поназваниям переменных понятно какими.
sprintf(request, "GET %s HTTP/1.0\r\n%s%sHost: %s:%d\r\n%s%s%s%s%s%s%s%s%s\r\n",
URL,
proxy_connection ? proxy_connection : "",
user_agent ? user_agent : "",
urlhost, urlport,
accept ? accept : "",
referer ? referer : "",
accept_encoding ? accept_encoding : "",
accept_language ? accept_language : "",
accept_charset ? accept_charset : "",
ua_pixels ? ua_pixels : "",
ua_color ? ua_color : "",
ua_os ? ua_os : "",
ua_cpu ? ua_cpu : "" );
//отсылаю сформированный запрос серверу.
do
{ res = WRITE(sock, request, strlen(request));
} while (res == -1 && errno == EINTR);
Data = (char *) malloc (100000);
//Читаю ответ сервера
res = READ(sock, Data, strlen(Data));
------------------
Ответ от сервера приходит всегда, но почемуто от некоторых приходит не страница а 302-я ошибка хотя страница в полном порядке лежит на сервере. Это чаще всего происходит когда я обращаюсь не к HTML странице а к скрипту формирующему HTML страницу.
Почему это происходит? И как этого избежать???
Заранее благодарен за любую помощ.
|
|
[C++] Плиз помогите начинающему разбираться в сетях. 24.03.02 03:31
Автор: Biasha <Бяша> Статус: Member Отредактировано 24.03.02 03:33 Количество правок: 1
|
Думаю у тебя ошибка в запросе - проверь его
> //сздаю сокет и соединяюсь с удаленной машиной > struct sockaddr_in sock_name; > struct hostent *hptr=NULL; > > hptr = gethostbyname("hostname"); > memcpy(&sock_name.sin_addr, hptr->h_addr, > hptr->h_length); > sock_name.sin_family = AF_INET; > sock_name.sin_port = htons(port); > > *sock = socket(AF_INET, SOCK_STREAM, 0); > connect(*sock, (struct sockaddr *) &sock_name, sizeof > (sock_name)) > > //создаю буфер для запроса, выделяю под него память... и > заполняю его данными. думаю поназваниям переменных понятно > какими. > sprintf(request, "GET %s HTTP/1.0\r\n%s%sHost: > %s:%d\r\n%s%s%s%s%s%s%s%s%s\r\n", > URL, Ну не совсем это URL - только имя файла, а не весь URL
> proxy_connection ? proxy_connection : "", > user_agent ? user_agent : "", > urlhost, urlport, > accept ? accept : "", > referer ? referer : "", > accept_encoding ? accept_encoding : "", > accept_language ? accept_language : "", > accept_charset ? accept_charset : "", > ua_pixels ? ua_pixels : "", > ua_color ? ua_color : "", > ua_os ? ua_os : "", > ua_cpu ? ua_cpu : "" ); Тут и посмотри значение request
> > //отсылаю сформированный запрос серверу. > do > { res = WRITE(sock, request, strlen(request)); > } while (res == -1 && errno == EINTR); > > Data = (char *) malloc (100000); > //Читаю ответ сервера > res = READ(sock, Data, strlen(Data));
|
|
[C++] Плиз помогите начинающему разбираться в сетях. 24.03.02 02:34
Автор: ih8u <i hate you> Статус: Member
|
Чо то у тебя какой-то запрос странный,
надо то всего:
GET /file HTTP/1.1\r\n
Host: www.server.com\r\n
\r\n
И всё, можно ещо юзер агента засунуть,
а так и этого хватает
|
| |
[C++]Что-то неполучается, Как должен правильно выглядеть запрос для такого случая? 24.03.02 12:37
Автор: Yuri Статус: Незарегистрированный пользователь
|
> Чо то у тебя какой-то запрос странный, > надо то всего: > GET /file HTTP/1.1\r\n > Host: www.server.com\r\n > \r\n Попробовал так как ты сказал но всеравно как и в моем случае часть сайтов проходит великолепно а часть нет. Может для некоторых сайтов нужны какието особые поля в запросе?
Обьясните пожалуйста на примере. Вот например этот линк моей программе возвращает 302-ю ошибку. Хотя в любом браузере проходит без проблем.
http://www.lustcomics.com/cgi-bin/topsites.cgi
Как правлино должен выглядеть запрос для этого конкретного URL-а
|
| | |
[C++] Да все нормально 24.03.02 13:43
Автор: :-) <:-)> Статус: Elderman Отредактировано 24.03.02 14:23 Количество правок: 2
|
Вот что происходит в твоем случае:
1) MSIE 5.0 делает запрос:
GET /cgi-bin/topsites.cgi HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,/ Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: MSIE 5.0
Host: www.lustcomics.com
Connection: Keep-Alive
2) А сервер ему и отвечает:
HTTP/1.1 302 Moved Temporarily
Server: Zeus/3.4
Date: Sun, 24 Mar 2002 11:15:45 GMT
Connection: close
Location: http://www.lustcomics.com/top/index.html
3) MSIE все понял и делает следущий запрос:
GET /top/index.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,/ Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: MSIE 5.0
Host: www.lustcomics.com
Connection: Keep-Alive
4) И сервер возвращает нужную страничку:
HTTP/1.1 200 OK
Server: Zeus/3.4
Date: Sun, 24 Mar 2002 11:15:46 GMT
Content-Length: 56264
Content-Type: text/html
Last-Modified: Sun, 24 Mar 2002 11:12:12 GMT
<HTML><HEAD><TITLE>Best free cartoon, comics, anime sites.</TITLE>
<script language="JavaScript"> <!--
defaultStatus="Best free cartoon, comics, anime sites.";
--></script>... дальше пошел HTML-текст ...
|
| | | |
Всем огромное спасибо. все получилось. 25.03.02 00:08
Автор: Yuri Статус: Незарегистрированный пользователь
|
|
|
|