Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: UrlDownloadToFile Добавлено: 22.08.06 14:24  

Автор вопроса:  i0ngunn3r

Ответить

  Ответы Всего ответов: 31  

Номер ответа: 16
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #16 Добавлено: 23.08.06 13:29
Sharp, не цепляйся к словам. Думаю это и так всем понятно. Просто человек неправильно выразился, ну а я поддержал. Речь то шла про его реализацию :)

Ответить

Номер ответа: 17
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #17 Добавлено: 23.08.06 17:08
Через Winsock, конечно, можно, но т.к. UrlDownloadToFile использует Cookies от IE (а мне надо качать html/php страницы), а Winsock - нет, то тут появляется еще куча проблем, и приходится писать чуть ли не свой браузер.
Задача такова - на странице есть форма (ХТМЛьная) (с логином и паролем), пробовал через Винсок через "POST /index.html", затем "Content-type: multiform" - что-то вроде этого, затем содержимое формы (название htmlных текстбоксов и их значение - логин и пароль)
Но у меня, наверн, что-то неправильно (что более вероятно) - ибо не работает. :(

Ответить

Номер ответа: 18
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #18 Добавлено: 23.08.06 18:28
Кстати, извините, можно пример использования URLOpenPullStream? :\

Ответить

Номер ответа: 19
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #19
Добавлено: 23.08.06 20:07
Sharp, не цепляйся к словам. Думаю это и так всем понятно. Просто человек неправильно выразился, ну а я поддержал. Речь то шла про его реализацию :)

Мне понятно, тебе понятно. А какой-нибудь Вася Пупкин будет несколько часов искать "функцию" IXmlHttpRequest по F2 или даже в ApiViewer и ничего не найдет.

Ответить

Номер ответа: 20
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #20 Добавлено: 23.08.06 21:21
Через Winsock, конечно, можно, но т.к. UrlDownloadToFile использует Cookies от IE (а мне надо качать html/php страницы), а Winsock - нет, то тут появляется еще куча проблем, и приходится писать чуть ли не свой браузер.


Можно попробовать перед вызовом функции поставить DoEvents, это может помочь.

Ответить

Номер ответа: 21
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #21 Добавлено: 23.08.06 21:26
Кстати, как я вижу по документации, в UrlDownloadToFile судя по всему можно делать асинхронные операции, т.е. ты вызвал функцию, она работает, твоя программа пошла выполняться дальше, функция через callback потом оповещает тебя о завершении загрузки.

Правда там не совсем политкорректный способ оповещения, какой-то IBindStatusCallback, я не уверен что в VB6 это можно разрулить...

Ответить

Номер ответа: 22
Автор ответа:
 Nash Bridges



Вопросов: 5
Ответов: 139
 Профиль | | #22 Добавлено: 23.08.06 23:51
UrlDownloadToFile - синхронная функция, т.е. код дальше не будет выполняться пока эта функция не отработает.
Другое дело, что действительно можно реализовать келбек-интерфейс и будут оповещения и все что надо. А вот что делать в этих келбеках (например, прогресс) - решать программисту. так что появляется возможность обработать кой-какие сообщения во время келбека.

Ответить

Номер ответа: 23
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #23 Добавлено: 24.08.06 12:10
На васме были статейки по этому поводу. Я бы сделал проще - пустил эту хрень в отдельном потоке и не грелся бы со всякими интерфейсами. А URLOpenPullStream использовать довольно просто если подключишь olelib.tlb - рулезная фича.
Кстати, если dll не ломает - http://www.vb.kiev.ua/code/networks/CSAsyncTransfer.zip. Она с исходниками, но, честно, сам не тестировал :)

Ответить

Номер ответа: 24
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #24
Добавлено: 24.08.06 12:59
Another fine solution from Sharp :)
#include <tchar.h>
#include <windows.h>

#include <iostream>
#include <vector>
#include <string>

using namespace std;

#include <conio.h>

#pragma comment (lib, "urlmon.lib";)


#define NOTIMPL(method) method { return E_NOTIMPL; }



class DownloadProgress : public IBindStatusCallback {
public:


DownloadProgress(){
m_nRef = 0;
}

HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv){
HRESULT hr = S_OK;
if(IsEqualIID(riid, IID_IUnknown)){
*ppv = (void *)static_cast<IBindStatusCallback *>;(this);
} else if(IsEqualIID(riid, IID_IBindStatusCallback)){
*ppv = (void *)static_cast<IBindStatusCallback *>;(this);
} else{
hr = E_NOINTERFACE;
*ppv = NULL;
}
if(SUCCEEDED(hr)){
reinterpret_cast<IUnknown *>;(*ppv)->AddRef();
}
return hr;
}

ULONG STDMETHODCALLTYPE AddRef(void){
m_nRef++;
return m_nRef;
}

ULONG STDMETHODCALLTYPE Release(void){
m_nRef--;
if(m_nRef == 0) delete this;
return m_nRef;
}  


HRESULT STDMETHODCALLTYPE OnStartBinding(DWORD dwReserved, IBinding *pib){
return E_NOTIMPL;
}
        
NOTIMPL(HRESULT STDMETHODCALLTYPE GetPriority(LONG *pnPriority));
NOTIMPL(HRESULT STDMETHODCALLTYPE OnLowResource(DWORD reserved));
        
HRESULT STDMETHODCALLTYPE OnProgress(ULONG ulProgress, ULONG ulProgressMax,
ULONG ulStatusCode, LPCWSTR szStatusText){

cout << "ulProgress :" << ulProgress << "ulProgressMax: " << ulProgressMax << endl;

return S_OK;
}
        
NOTIMPL(HRESULT STDMETHODCALLTYPE OnStopBinding(HRESULT hresult, LPCWSTR szError));
NOTIMPL(HRESULT STDMETHODCALLTYPE GetBindInfo(DWORD *grfBINDF, BINDINFO *pbindinfo));
NOTIMPL(HRESULT STDMETHODCALLTYPE OnDataAvailable(DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed));
NOTIMPL(HRESULT STDMETHODCALLTYPE OnObjectAvailable(REFIID riid, IUnknown *punk));

public:
ULONG m_nRef;
};



int main(){
DownloadProgress *dp = new DownloadProgress;

HRESULT hRes = URLDownloadToFile(NULL, "http://127.0.0.1/_mir/articles/TrueType.tar.bz2", "F:\\1.tbz", 0, dp);
if(SUCCEEDED(hRes)){
cout << ";Download complete!" << endl;
} else{
cout << ";Download failed..." << endl;
}

getch();
return 0;
}

Ответить

Номер ответа: 25
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #25 Добавлено: 24.08.06 14:39
И ведь не лень писать было :))
Кстати, если подключить olelib.tlb, то можно имплементировать IBindStatusCallback в своем VB классе. Это для нелюбителей Dll.

Ответить

Номер ответа: 26
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #26
Добавлено: 24.08.06 15:55
Ну вообще я это довольно давно писал :)

Ответить

Номер ответа: 27
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #27 Добавлено: 24.08.06 17:04
Я бы сделал проще - пустил эту хрень в отдельном потоке и не грелся бы со всякими интерфейсами.

LOL! Ты хотел хотел сказать "Я бы сделал сложнее"?
:):):):):)

Ответить

Номер ответа: 28
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #28
Добавлено: 24.08.06 17:13
URLDownloadToFile - это говнометод. Поэтому лучше все же действительно пустить в отдельном треде :)

Ответить

Номер ответа: 29
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #29 Добавлено: 24.08.06 17:20
Ну чего ж там сложного? Разумеется, если бы это нужно было для проекта, я бы воткнул подобный код в одну из dllек, их всегда хватает. А если чисто на VB... Я уже давно юзаю вместо Standart.exe ActiveX.exe Standalone, там подобных проблем не бывает.
Ну ведь недавно ссылку публиковали на васм, где эту тему разрулили из VB без всяких библиотек (вроде, я сам по ссылке не прошел).
По поводу вышеизложенного кода - фичу недопонял, смысл был в том чтобы производить закачку в параллельном потоке а не пытаться отработать сообщения в callback и вывести итог в консоль. Потоков код не создает и так же презабавно интерфейсную часть повесит :)

Ответить

Номер ответа: 30
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #30
Добавлено: 25.08.06 13:18
Ну ведь недавно ссылку публиковали на васм, где эту тему разрулили из VB без всяких библиотек (вроде, я сам по ссылке не прошел).
Линк в студию, я не видел. Или запрос для поиска.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам