OVH Cloud OVH Cloud

wininet.dll

9 réponses
Avatar
Bul
bonjour à tous,
je tente d'utiliser les API de wininet.dll, et ça
commence mal ( pour moi ). par exemple :
Session = InternetOpen("exemple", 1, vbNullString, _
vbNullString, 0)
Ftp = InternetConnect(Session, "ftp://ftp.borland.com", 21, _
"anonymous", "anonymous", _
1, 0, 0)
retourne Ftp=0.
( j'ai essayé sur mon site avec un nom d'utilisateur
et un mot de passe, même punition. )

je n'ai pas compris quoi ?
pouvez-vous m'aider ? m'expliquer ?
merci d'avance.

9 réponses

Avatar
François Picalausa
Hello,

Tu peux utiliser Err.LastDllError qui te retournera un code d'erreur que tu
pourra utiliser pour déterminer la cause du problème.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Bul" a écrit dans le message de
news:%
je tente d'utiliser les API de wininet.dll, et ça
commence mal ( pour moi ). par exemple :
Session = InternetOpen("exemple", 1, vbNullString, _
vbNullString, 0)
Ftp = InternetConnect(Session, "ftp://ftp.borland.com", 21, _
"anonymous", "anonymous", _
1, 0, 0)
retourne Ftp=0.
( j'ai essayé sur mon site avec un nom d'utilisateur
et un mot de passe, même punition. )


Avatar
Bul
merci François Picalausa
j'abuse mais :
Err.LastDllError me donne l'erreur 12007
et "où c'est-y que" je trouve la signification ?
Avatar
François Picalausa
Hello,

Ces erreurs sont décrites dans Wininet.h + les erreurs systèmes.
Pour les erreurs systèmes:
http://msdn.microsoft.com/library/en-us/debug/base/system_error_codes.asp

Pour ce qui est de wininet:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/wininet_errors.asp

Donc ici, ERROR_INTERNET_NAME_NOT_RESOLVED : The server name could not be
resolved.

Il faut voir ce qui empèche la résolution de ce serveur... peut être un
firewall trop bien configuré?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Bul" a écrit dans le message de
news:eI%
j'abuse mais :
Err.LastDllError me donne l'erreur 12007
et "où c'est-y que" je trouve la signification ?


Avatar
Bul
je vais regarder cela... merci
pas de firewall
Windows 98 + Visual Basic 5
ça explique ?
Avatar
François Picalausa
Hello,

Ca ne l'explique pas.
Tu peux regarder sur
http://support.microsoft.com/default.aspx?scid=kb;en-us;175179
si tu emploies les bonnes déclarations d'API et les bons appels...
Sinon, post tes déclarations ici, ça aidera peut-être à déterminer le
problème.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Bul" a écrit dans le message de
news:
je vais regarder cela... merci
pas de firewall
Windows 98 + Visual Basic 5
ça explique ?


Avatar
Bul
merci François Picalausa de répondre
voici la source (simplifiée pour essais) :

Private Declare Function InternetOpen _
Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal sAgent As String, _
ByVal lAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal lFlags As Long) As Long
Const INTERNET_FLAG_ASYNC = &H10000000 'Les requêtes sont effectuées en
asynchrones.
Const INTERNET_FLAG_FROM_CACHE = &H1000000 'Les requêtes sont effectuées à
partir du cache, si l'élément n'est pas dans le cache, une erreur est
retournée.
Const INTERNET_FLAG_OFFLINE = &H1000000 'Identique à
INTERNET_FLAG_FROM_CACHE.
Const INTERNET_OPEN_TYPE_DIRECT = 1 'Résoud les noms en local.
Const INTERNET_OPEN_TYPE_PRECONFIG = 0 'Récupère la configuration par
défaut (base de registre).
Const INTERNET_OPEN_TYPE_PROXY = 3 'Envoi des requêtes au proxy,
sauf pour les exceptions indiquées dans sProxyBypass.

Private Declare Function InternetConnect _
Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Long, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long
Const INTERNET_DEFAULT_FTP_PORT = 21 'Port FTP par défaut.
Const INTERNET_DEFAULT_GOPHER_PORT = 70 'Port Gopher par défaut.
Const INTERNET_DEFAULT_HTTP_PORT = 80 'Port HTTP par défaut.
Const INTERNET_DEFAULT_HTTPS_PORT = 443 'Port HTTPS par défaut.
Const INTERNET_DEFAULT_SOCKS_PORT = 1080 'Port Socks (firewall) par
défaut.
Const INTERNET_SERVICE_FTP = 1 'Service FTP.
Const INTERNET_SERVICE_GOPHER = 2 'Service Gopher.
Const INTERNET_SERVICE_HTTP = 3 'Service HTTP.

Dim Ftp, Session As Long

Option Explicit

Private Sub Command1_Click()
Session = InternetOpen("exemple", 1, vbNullString, _
vbNullString, 0)
Ftp = InternetConnect(Session, "ftp://ftp.borland.com", 21, _
"anonymous", "anonymous", _
1, 0, 0)

MsgBox Err.LastDllError
End Sub
Avatar
François Picalausa
Hello,

Le nom du serveur est mal passé.

Dans
Ftp = InternetConnect(Session, "ftp://ftp.borland.com", 21, _
"anonymous", "anonymous", _
1, 0, 0)

ftp:// représente le protocol
ftp.borland.com est le serveur

Il faut donc utiliser
Ftp = InternetConnect(Session, "ftp.borland.com", 21, _
"anonymous", "anonymous", _
1, 0, 0)

Généralement c'est l'utilisateur qui saisit l'url.
Dans ce cas, on peut retrouver le serveur à partir de InternetCrackURL:
Public Enum INTERNET_SCHEME
INTERNET_SCHEME_PARTIAL = -2
INTERNET_SCHEME_UNKNOWN = -1
INTERNET_SCHEME_DEFAULT = 0
INTERNET_SCHEME_FTP
INTERNET_SCHEME_GOPHER
INTERNET_SCHEME_HTTP
INTERNET_SCHEME_HTTPs
INTERNET_SCHEME_FILE
INTERNET_SCHEME_NEWS
INTERNET_SCHEME_MAILTO
INTERNET_SCHEME_SOCKS
INTERNET_SCHEME_JAVASCRIPT
INTERNET_SCHEME_VBSCRIPT
INTERNET_SCHEME_RES
INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP
INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES
End Enum

Private Type URL_COMPONENTS
dwStructSize As Long
lpszScheme As String
dwSchemeLength As Long
nScheme As Long
lpszHostName As String
dwHostNameLength As Long
nPort As Long
lpszUserName As String
dwUserNameLength As Long
lpszPassword As String
dwPasswordLength As Long
lpszUrlPath As String
dwUrlPathLength As Long
lpszExtraInfo As String
dwExtraInfoLength As Long
End Type

Private Declare Function InternetCrackUrl _
Lib "Wininet" _
Alias "InternetCrackUrlA" _
( _
ByVal lpszUrl As String, _
ByVal dwUrlLength As Long, _
ByVal dwFlags As Long, _
lpUrlComponents As URL_COMPONENTS _
) _
As Long

Public Function CrackUrl(ByVal Url As String, Optional Scheme As String,
Optional HostName As String, Optional Path As String, Optional UserName As
String, Optional Password As String, Optional Port As Integer, Optional
URLSheme As Long, Optional ExtraInfo As String) As Boolean
Dim Cmpts As URL_COMPONENTS

Url = CanonicalizeURL(Url)

With Cmpts
.dwStructSize = Len(Cmpts)
.lpszScheme = String$(INTERNET_MAX_SCHEME_LENGTH, vbNullChar)
.dwSchemeLength = INTERNET_MAX_SCHEME_LENGTH
.lpszHostName = String$(INTERNET_MAX_HOST_NAME_LENGTH, vbNullChar)
.dwHostNameLength = INTERNET_MAX_HOST_NAME_LENGTH
.nPort = 0
.lpszUserName = String$(INTERNET_MAX_USER_NAME_LENGTH, vbNullChar)
.dwUserNameLength = INTERNET_MAX_USER_NAME_LENGTH
.lpszPassword = String$(INTERNET_MAX_PASSWORD_LENGTH, vbNullChar)
.dwPasswordLength = INTERNET_MAX_PASSWORD_LENGTH
.lpszUrlPath = String$(INTERNET_MAX_PATH_LENGTH, vbNullChar)
.dwUrlPathLength = INTERNET_MAX_PATH_LENGTH
.lpszExtraInfo = String$(INTERNET_MAX_PATH_LENGTH, vbNullChar)
.dwExtraInfoLength = INTERNET_MAX_PATH_LENGTH
End With

CrackUrl = InternetCrackUrl(Url, Len(Url), ICU_DECODE, Cmpts)

Scheme = NullTrim(Cmpts.lpszScheme)
HostName = NullTrim(Cmpts.lpszHostName)
Path = NullTrim(Cmpts.lpszUrlPath)
UserName = NullTrim(Cmpts.lpszUserName)
Password = NullTrim(Cmpts.lpszPassword)
Port = Cmpts.nPort
URLSheme = Cmpts.nScheme
ExtraInfo = NullTrim(Cmpts.lpszExtraInfo)
End Function
Private Function NullTrim(strString As String) As String
If InStr(1, strString, vbNullChar) Then
NullTrim = Left$(strString, InStr(1, strString, vbNullChar) - 1)
End If
End Function

Public Function GetScheme(Url As String) As INTERNET_SCHEME
Dim Scheme As Long
If CrackUrl(Url, , , , , , , Scheme) Then
GetScheme = Scheme
End If
End Function

Public Function GetHostName(Url As String) As String
Dim HostName As String
If CrackUrl(Url, , HostName) Then
GetHostName = HostName
End If
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Bul" a écrit dans le message de
news:%
Avatar
Jean-Marc
"Bul" a écrit dans le message de
news:%
merci François Picalausa de répondre
voici la source (simplifiée pour essais) :

Private Declare Function InternetOpen _
Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal sAgent As String, _
ByVal lAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal lFlags As Long) As Long
Const INTERNET_FLAG_ASYNC = &H10000000 'Les requêtes sont effectuées


en
asynchrones.
Const INTERNET_FLAG_FROM_CACHE = &H1000000 'Les requêtes sont effectuées


à
partir du cache, si l'élément n'est pas dans le cache, une erreur est
retournée.
Const INTERNET_FLAG_OFFLINE = &H1000000 'Identique à
INTERNET_FLAG_FROM_CACHE.
Const INTERNET_OPEN_TYPE_DIRECT = 1 'Résoud les noms en local.
Const INTERNET_OPEN_TYPE_PRECONFIG = 0 'Récupère la configuration par
défaut (base de registre).
Const INTERNET_OPEN_TYPE_PROXY = 3 'Envoi des requêtes au proxy,
sauf pour les exceptions indiquées dans sProxyBypass.

Private Declare Function InternetConnect _
Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Long, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long
Const INTERNET_DEFAULT_FTP_PORT = 21 'Port FTP par défaut.
Const INTERNET_DEFAULT_GOPHER_PORT = 70 'Port Gopher par défaut.
Const INTERNET_DEFAULT_HTTP_PORT = 80 'Port HTTP par défaut.
Const INTERNET_DEFAULT_HTTPS_PORT = 443 'Port HTTPS par défaut.
Const INTERNET_DEFAULT_SOCKS_PORT = 1080 'Port Socks (firewall) par
défaut.
Const INTERNET_SERVICE_FTP = 1 'Service FTP.
Const INTERNET_SERVICE_GOPHER = 2 'Service Gopher.
Const INTERNET_SERVICE_HTTP = 3 'Service HTTP.

Dim Ftp, Session As Long

Option Explicit

Private Sub Command1_Click()
Session = InternetOpen("exemple", 1, vbNullString, _
vbNullString, 0)
Ftp = InternetConnect(Session, "ftp://ftp.borland.com", 21, _
"anonymous", "anonymous", _
1, 0, 0)

MsgBox Err.LastDllError
End Sub





Hello Bul,

le seul souci vient de "ftp://"

Avec la modification suivante, le code fonctionne tel quel:

Ftp = InternetConnect(Session, "ftp.borland.com", 21, _
"anonymous", "", _
1, 0, 0)


En fait il est facile de voir si tes commandes ou connections sont ok ou
non: il suffit de les taper dans une fenêtre de commande. Extrait:
---------------------------------------
C:>ftp ftp://ftp.borland.com
Hôte inconnu ftp://ftp.borland.com.
ftp>
---------------------------------------

On réessaie:
----------------------------------------------------------------------------
------
C:>ftp ftp.borland.com
Connecté à 12346.ftp.storage.akadns.net.
220 Akamai Content Storage FTP Server (193.108.93.83)
Utilisateur (12346.ftp.storage.akadns.net:(none)) : anonymous
331 Anonymous login ok, send your complete e-mail address as password.
Mot de passe :
230-
----------------------------------------------------------------------------
WARNING: This is a restricted access system. If you do not have explicit
permission to access this system, please disconnect immediately!
----------------------------------------------------------------------------
230 User anonymous logged in.
ftp>
----------------------------------------------------------------------------
-------

et hop ça marche !

Jean-marc
Avatar
Bul
merci messieurs,
on ( enfin je ) fait souvent des
bêtises plus grosses que moi.
je reviendrais pour mes
prochaines erreurs ...
cordialement.