WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  http

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   http
andrewag опубликован 25-07-2001 07:46 MSK   Click Here to See the Profile for andrewag   Click Here to Email andrewag  
Привет, народ!
Имеется в инете некоторый файл, надо его скачать "вручную". Как???
purpe опубликован 25-07-2001 08:20 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
мне очень ндравится делать всякие штучки в API, так как он более нагляден, прозрачен для меня, а так же экзешнички по-меньше делает :)

так что звиняйте ...


#define RBC_PORT 80
#define RBC_ADDR "127.0.0.1"

SOCKET SendSocket;

int rc;
WSADATA WSAData;

rc = WSAStartup(MAKEWORD(1, 1), &WSAData);
if(rc != 0) return FALSE;

struct sockaddr_in srv_address;
int namelen;

SendSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(SendSocket != INVALID_SOCKET) {
memset(&srv_address,0,sizeof(SOCKADDR_IN));
srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
srv_address.sin_family = AF_INET;
srv_address.sin_port = 0;
}
if(bind(SendSocket, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) {
closesocket(SendSocket);
return FALSE;
} else {
namelen=sizeof(SOCKADDR_IN);
getsockname(SendSocket,(SOCKADDR *)&srv_address,&namelen);
return TRUE;
}


SOCKADDR_IN remoteAddr;
int err;
int iMsg = 0;
int iLength;
int iEnd = 0;
BYTE sBuf[4096];
char *RbcMessage[] =
{
"GET /index.html HTTP/1.0\r\n",
"Accept: */*\r\n",
"Referer: http://www.sources.ru\r\n",
"Accept-Language: ru\r\n",
"Accept-Encoding: gzip, deflate\r\n",
"User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)\r\n",
"Host: www.rbc.ru\r\n\r\n\r\n",
NULL
};

remoteAddr.sin_family = AF_INET;
remoteAddr.sin_port = htons(RBC_PORT);
remoteAddr.sin_addr.s_addr = inet_addr(RBC_ADDR);

err = connect (SendSocket, (PSOCKADDR) & remoteAddr, sizeof (remoteAddr));
if(err) {
}
else {
do {
send(SendSocket, (LPSTR)RbcMessage[iMsg], strlen(RbcMessage[iMsg]), 0);
iMsg++;
} while(RbcMessage[iMsg]);
iLength = recv(SendSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0);
}
closesocket(SendSocket);


после выполнения ентого примера, переменная sBuf, поидее должна содержать заглавную страничку с запрашиваемого сайта :)

breeder опубликован 25-07-2001 11:29 MSK     Click Here to See the Profile for breeder  Click Here to Email breeder     
Наверное через WinInet проще - ненужно будет думать, прямое соединение с инетом на данной машине или через прокси...
purpe опубликован 25-07-2001 11:56 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
2breeder:
ну так ясный перец :) просто человек, задавший вопрос, скорее всего не понимает работы данного механизма, а приведённый мной пример хоть как-то наглядно показывает - как енто работает.

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

breeder опубликован 25-07-2001 14:46 MSK     Click Here to See the Profile for breeder  Click Here to Email breeder     
2purpe:
Ну это как посмотреть %)
Человек, задавший вопрос, скорее всего, разрабатывает какую-то программу, доставка из интернета файла в которой является всего лишь одной из операций.
Например, когда я пишу какой-либо код, я абсолютно не задумываюсь как будет вести себя каждый из милионов (или милиардов?) транзисторов из которых состоит процессор при выполнении этого кода %)
kuka опубликован 11-03-2001 14:30 MSK     Click Here to See the Profile for kuka  Click Here to Email kuka     
извините за тупой вопрос, но все таки...

как сделать тоже самое только через проксю с авторизацией??

желательно сразу пример исходника, если есть...

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.