Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
vinternete
2 / 3 / 1
Регистрация: 02.11.2010
Сообщений: 129
#1

Скачать файл с интернета по прямой ссылке - C (СИ)

02.11.2010, 20:54. Просмотров 1638. Ответов 3
Метки нет (Все метки)

появилась необходимость в скачивании файла с инета по прямой ссылке, но к сажелению в инете на СИ ненашел,очень надеюсь на вашу помощь. (например скачать test.txt файл с mysite.ru/test.txt)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2010, 20:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скачать файл с интернета по прямой ссылке (C (СИ)):

Переписать в файл Н коэффициенты прямых, которые: а) параллельны первой прямой б) пересекаются с последней прямой - C (СИ)
Прямая на плоскости задается уравнением Ах+Ву+С=0, где А и В одновременно не равны 0. Пусть коэффициенты А, В, С – целые числа, которые...

Скачать файл по прямой ссылке. - C#
Нужно скачать файл по прямой ссылке в консольке, который будет сохранять файл по опр. пути. Буду благодарен за пример.

.NET 3.x Как скачать файл по прямой ссылке? - C#
Как реализовать скачивание .exe файла по прямой ссылке? Сама ссылка: http://vk.cc/5bTajq Через WebClient? пробую так: using...

Скачать файл по ссылке из интернета на комп - C#
Подскажите, команду и ее использование. Есть только адрес к файлу в интернете. Нужно чтобы файл загрузился и сохранился в папку на...

Загрузка файлов из интернета по прямой ссылке (Xamarin) - Xamarin
Есть сылка на pdf документ, необходимо скачать его для последующего открытия, подскажите как это реализовать?) Пробовал через WebClient...

Из интернета по прямой ссылке на сайте отображаются фотки, как проверить на битые ссылки - PHP
Все фотки которые находятся на сайте хранятся в облаке(<img src="http://werwerw.werwer.jpg">), некоторые фотки не подгружаются потому что...

3
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 21:01 #2
Плохо искал. Ищи дальше)

P.S. либо wininet либо сокеты
0
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
02.11.2010, 21:18 #3
http://stackoverflow.com/questions/1...request-with-c
0
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 21:19 #4
на корочь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// by SlyBit (c) 07.2008 /DownloadFile.cpp/
  
#include "winsock2.h"
#include <windows.h>
  
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(linker, "/ENTRY:Main")
  
#define HOST_NAME   "wasm.ru"
#define URL_NAME    "/pub/21/files/lockfileswork/RawRead.rar" 
#define FILE_NAME   "RawRead.rar"
#define HEADER_SIZE 400
  
// Возводим число x в положительную целочисленную степень
#define DEGREE(Val, Deg) if(!Deg) { Val = 1; } else for(int i1=2, i2=Val; i1<=Deg; i1++) { Val *= i2; }                    
 
// Переводим число Str, представленное в виде строки в числовой вид Int
#define STR_TO_INT(Str, Int) for(int l=0, s=10; l<strlen(Str); l++, s=10) { DEGREE(s, (strlen(Str)-1-l)); Int += ((BYTE)Str[l]-0x30)*s; }
   
PCHAR WINAPI HTTPSendReceiveData(PVOID pInData, DWORD dwInDataSize, PCHAR pIpAddress, PDWORD pOutSizeSize)
{ 
    SOCKET      ConnectSocket;
    sockaddr_in ClientService; 
    INT         nReceiveBytes, i, j = 0, nCurr;
    CHAR        szHeader[HEADER_SIZE] = "\0", szVal[10] = "\0";
    PCHAR       pOutData = 0;
  
    if(INVALID_SOCKET == (ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))) {
        return 0;
    }
     
    ClientService.sin_family = AF_INET;
    ClientService.sin_port = htons(80);
    ClientService.sin_addr.s_addr = inet_addr(pIpAddress);
    
    if(SOCKET_ERROR == connect(ConnectSocket, (SOCKADDR*)&ClientService, sizeof(ClientService))) {
        closesocket(ConnectSocket);
        return 0;
    }
    
    if(SOCKET_ERROR == send(ConnectSocket, (PCHAR)pInData, dwInDataSize, 0)) {
        closesocket(ConnectSocket);
        return 0;
    }
    
    // Получаем заголовок ответа
    if(SOCKET_ERROR == recv(ConnectSocket, szHeader, HEADER_SIZE, 0)) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    for(i=0; i<HEADER_SIZE; i++) 
    {
        // Получаем размер данных
        if(!memcmp("Content-Length: ", szHeader+i, strlen("Content-Length: ")-1))
        {
            do {
                szVal[j] = szHeader[i+strlen("Content-Length: ")+j]; j++;
            } while(szHeader[i+strlen("Content-Length: ")+j] != '\r');
            
            STR_TO_INT(szVal, *pOutSizeSize);
        }
        // Получаем указатель на начало файла в ответе
        if(!memcmp("\r\n\r\n", szHeader+i, strlen("\r\n\r\n")-1))
        {
            i += strlen("\r\n\r\n");
            break;
        }
    }
    
    if((HEADER_SIZE-1 == i) || !*pOutSizeSize) {
        return 0;
    }
  
    if(!(pOutData = (PCHAR)VirtualAlloc(0, *pOutSizeSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))) {
        return 0;
    }
   
    if(HEADER_SIZE-i >= *pOutSizeSize) {
        memcpy(pOutData, szHeader+i, *pOutSizeSize);
    } else {
        nCurr = HEADER_SIZE-i;
        memcpy(pOutData, szHeader+i, nCurr);
        
        // Получаем оставшиеся данные    
        while(nReceiveBytes = recv(ConnectSocket, pOutData+nCurr, *pOutSizeSize-nCurr, 0))  {
            if(nReceiveBytes == SOCKET_ERROR) {
                closesocket(ConnectSocket);
                return 0;
            }
            nCurr += nReceiveBytes;
        }
    }
   
    closesocket(ConnectSocket);
    
    return pOutData;
}
    
BOOL WINAPI GetIpByHostName(PCHAR pHostName, PCHAR pIp, DWORD dwIpSize)
{
    hostent *pHosten;
    
    if(!(pHosten = gethostbyname(pHostName))) {
        return 0;
    }
    
    if(lstrlen(inet_ntoa(*(in_addr*)*pHosten->h_addr_list)) > dwIpSize) {
        return 0;
    }
    
    lstrcpy(pIp, inet_ntoa(*(in_addr*)*pHosten->h_addr_list));
   
    return 1;
}
   
BOOL WINAPI DownloadFile(PCHAR pFileName, PCHAR pHostName, PCHAR pUrl)
{
    CHAR    szIp[17], szSendData[300];
    PCHAR   pFile = 0;
    HANDLE  hFile;
    DWORD   dwFileSize = 0, dwRetSize;
    
    if(!GetIpByHostName(pHostName, szIp, 17)) {
        return 0;
    }
    
    wsprintf(szSendData, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", pUrl, pHostName);
   
    if(!(pFile = HTTPSendReceiveData(szSendData, strlen(szSendData), szIp, &dwFileSize))) {
        return 0;
    }
    
    if(INVALID_HANDLE_VALUE == (hFile = CreateFile(pFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0))) {
        VirtualFree(pFile, 0, MEM_RELEASE);
        return 0;
    }
    
    if(!WriteFile(hFile, pFile, dwFileSize, &dwRetSize, 0)) {
        VirtualFree(pFile, 0, MEM_RELEASE);
        CloseHandle(hFile); 
        return 0;
    }
    
    VirtualFree(pFile, 0, MEM_RELEASE);
    CloseHandle(hFile);
    
    return 1;
}
    
VOID WINAPI Main()
{   
    WSAData wsaData;
   
    if(NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData)) {
        ExitProcess(0);
    }
   
    if(DownloadFile(FILE_NAME, HOST_NAME, URL_NAME)) {
        MessageBox(0, "DownloadFile Ok", 0, 0);
    } else {
        MessageBox(0, "DownloadFile Error", 0, 0);
    }
   
    ExitProcess(0);
}
Сразу скажу ,что сорсы не мои ,реализовано криво.
1
02.11.2010, 21:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2010, 21:19
Привет! Вот еще темы с ответами:

Скачать файл по ссылке - C++ Builder
Добрый день. Такое интересное задание (ну дал админ мне его) как студенту практиканту, но дело в том, что именно реализовать на С++ в...

Скачать файл по ссылке - C#
Добрый день! Значит вот с чем столкнулся, делаю SSIS пакет который должен будет скачивать файл с инета, и далее его заливать в...

Скачать файл с интернета - Delphi
Немогу скачать файл с интернета этим кодом: var FS: TFileStream; begin FS := TFileStream.Create('test.txt', FMCreate); ...

Скачать файл с интернета - C#
Доброго времени суток, форумчане! Я решил написать программу, которая будет скачивать с интернета, но не просто скачал и все, а с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.