Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupérer une page html dans un fichier texte

3 réponses
Avatar
Nicolas
Salut,

En windev 5.5, je cherche à récupérer une page internet sur le web dans un
fichier texte pour ensuite pouvoir l'étudier et extraire certaines
informations.
Dans "le guide" windev 5.5, en tapant le mot clé internet j'ai trouvé "copie
d'un ficher html sur un serveur web vers un disque local" ce qui à 1ère vue
correspond à ma demande.
Mais le code est bourré d'erreur,. J'ai commencé à le corriger mais j'ai un
souci quand il y a un appel "connect" avec wsock32.dll, j'ai toujours le
code retour d'erreur -1.
Est-ce quelqu'un qui connait les API windows peut m'aider à débuguer cet
exemple.
Merci.

Nicolas

3 réponses

Avatar
philippe chaissac
Salut,

Nicolas a écrit :

En windev 5.5, je cherche à récupérer une page internet sur le web dans un
fichier texte pour ensuite pouvoir l'étudier et extraire certaines
informations.



Essaye avec wininet (attention : si la page est trop grosse, il faudra
changer l'algo vu que le résultat passe dans une chaine) :

Fonction getSourceFromUrl(page)
resultat est une chaine asciiz de 1024 = ""
hC est un entier long
hC=appeldll32("wininet","InternetOpenA","test",1,null,null,0)
si hC alors
ad est une chaine asciiz de 64 = page
hU est un entier long
hU=appeldll32("wininet","InternetOpenUrlA",hC,&ad,null,0,0x80000000,0)
si hU alors
nb est un entier long
appeldll32("wininet","InternetReadFile",hU,&resultat,65000,&nb)
appeldll32("wininet","InternetCloseHandle",hU)
sinon
resultat="ERREUR"
fin
appeldll32("wininet","InternetCloseHandle",hC)
sinon
resultat="ERREUR"
FIN
renvoyer resultat
Avatar
Nicolas
Merci

Windev 7.5 dans le carton à côté de mon bureau mais j'ai pas encore osez
l'installé car tous mes progs sont en 5.5.
Je suis ton avis, je fonce j'ouvre la boîte et j'installe.... (euh sur un PC
différent on sait jamais...)

Merci encore


"Fabrice Burghgraeve" a
écrit dans le message de news: bg5t7l$srd$
salut.

"Nicolas" a écrit dans le message de
news:3f256649$0$24605$
> Salut,
>
> En windev 5.5, je cherche à récupérer une page internet sur le web dans


un
> fichier texte pour ensuite pouvoir l'étudier et extraire certaines
> informations.
> Dans "le guide" windev 5.5, en tapant le mot clé internet j'ai trouvé
"copie
> d'un ficher html sur un serveur web vers un disque local" ce qui à 1ère
vue
> correspond à ma demande.
> Mais le code est bourré d'erreur,. J'ai commencé à le corriger mais j'ai
un
> souci quand il y a un appel "connect" avec wsock32.dll, j'ai toujours le
> code retour d'erreur -1.
> Est-ce quelqu'un qui connait les API windows peut m'aider à débuguer cet
> exemple.
> Merci.
>
> Nicolas
>

en windev 5.5, j'avais essaye d'utiliser la winsock32 (win 2000 pro)

impossible.....
chargedll echouait.

reponse du ST :
la dll n'est pas instalee.

ma reponse :
si. je l'utilise en VC++, et ca marche , donc ca vient de windev.

Bref, jamais reussi a ouvrir cette putain de DLL

une piste qui m'est apparue bizarre : le fichier winsock32.dll est tout
petit chez moi.
Mais il avait la meme taille chez PCSOFT ou bien sur tout allait bien.

J'etais le seul au monde a avoir ce soucis donc forcement c'etait mon code
(vachement long pour ouvrir une dll) ou la DLL mal installee.

finalement, comme on avait achete windev 7, qui devait sortir deux mois


plus
tard, et qui gerait les sockets, et que j'etais pas presse, j'ai continue
d'utiliser mon appli en VC++

apres j'ai dechanté.... les sockets en windev 7, c'etait comme le reste :


de
la poudre aux yeux et une grosse merde inutilisable... notement : pas de
socket en mode stream...
Je parle bien sur de la 7.0 version finale. En 7.5 c'est mieux mais je
continue de penser que leurt implementation des sockets est loin d'etre
nette. Toutefois, on arrive a faire un programme qui marche avec.

voila t'es pas tres avance avec tout ca...

mis a part que :
1) t'es pas tout seul a avoir ete emmerde avec winsock32 et windev 5.5,
quoiqu'en dise le ST (comme ils maintiennent plus 5.5, ils vont surement


pas
te dire grand chose de satisfaisant)
2) si tu passes en 7.5, tu devrais pouvoir t'en sortir avec les sockets de
windev (apres quelques touffes de cheveux perdues)

d'ailleurs, comme apparement tu debutes ce projet, je te conseille de
demarrer directement en version 7.5 (quelle release ? c'est au petit


bohneur
la chance suivant les fonctions que tu utilises)

J'ai pas d'actions chez PCSOFT, mais elle est franchement mieux que la


5.5,
(meme si j'ai toujours des doutes sur la stabilite des applis generees)

a part ca, je vois pas tellemnt pourquoi tu utilises une socket...
si c'est pour un besoin ponctuel tu peux faire clic droit -> afficher la
source.
ca apparait dasn notepad, et tu peux sauvegarder le fichier

si c'est pour automatiser, je comprends (un peu...) mieux...

Mais tu risques d'etre emmerde parce qu'une fois que t'aura connecte ta
socket au serveur web, tu va faire quoi ?
je pose la question serieusement, j'ai pas d'element de reponse... j'ai


pas
les connaissances pour...
Je pense que tu va devoir te palucher un dialogue en http, et a priori,
bonjour l'angoisse... (encore une fois, je parle avec la voix de


l'ignorance
sur ce point)
me trompes-je ? ou es-tu un pro de l'http qui a lu toutes les RFC qui s'y
referent ?


--
Fabrice Burghgraeve
Computer & Services

(enlevez le _pas_de_spam_ pour me répondre en privé)




Avatar
Nicolas
elle doit tourner absolument en 32 bits !
c'est lors de l'appeldll32(wsock32,connect...) (cherche le mot clé
"connect")
il y a d'autres erreurs avant mais j'ai pu les corriger.

"farplus" a écrit dans le message de news:


Bonjour,

la fonction que tu décris genère 2 procedures locales
copyhttp1(..) et erreurwsa1(..)
à quel numéro de ligne du reçois le -1 ?
As-tu essayé de faire tourner le code en 16 et 32 bits ?

Pour ton orientation, je fais un copier-coller de la description de cette
fonction API (en anglais et pour VB):
tu peux contrôler si les différentes structures et valeurs dans WL sont


les
mêmes que l'original.
C'est plus facile que ça en a l'air de prime abord:


Public Const AF_INET = 2
Public Const INVALID_SOCKET = -1
Public Const SOCKET_ERROR = -1
Public Const FD_READ = &H1&
Public Const FD_WRITE = &H2&
Public Const FD_CONNECT = &H10&
Public Const FD_CLOSE = &H20&
Public Const PF_INET = 2
Public Const SOCK_STREAM = 1
Public Const IPPROTO_TCP = 6
Public Const GWL_WNDPROC = (-4)
Public Const WINSOCKMSG = 1025
Public Const WSA_DESCRIPTIONLEN = 256
Public Const WSA_DescriptionSize = WSA_DESCRIPTIONLEN + 1
Public Const WSA_SYS_STATUS_LEN = 128
Public Const WSA_SysStatusSize = WSA_SYS_STATUS_LEN + 1
Public Const INADDR_NONE = &HFFFF
Public Const SOL_SOCKET = &HFFFF&
Public Const SO_LINGER = &H80&
Public Const hostent_size = 16
Public Const sockaddr_size = 16
Type WSADataType
wVersion As Integer
wHighVersion As Integer
szDescription As String * WSA_DescriptionSize
szSystemStatus As String * WSA_SysStatusSize
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo As Long
End Type
Type HostEnt
h_name As Long
h_aliases As Long
h_addrtype As Integer
h_length As Integer
h_addr_list As Long
End Type
Type sockaddr
sin_family As Integer
sin_port As Integer
sin_addr As Long
sin_zero As String * 8
End Type
Type LingerType
l_onoff As Integer
l_linger As Integer
End Type
Public Declare Function setsockopt Lib "wsock32.dll" (ByVal s As Long,


ByVal
Level As Long, ByVal optname As Long, optval As Any, ByVal optlen As Long)


As
Long
Public Declare Function getsockopt Lib "wsock32.dll" (ByVal s As Long,


ByVal
Level As Long, ByVal optname As Long, optval As Any, optlen As Long) As


Long
Public Declare Function WSAGetLastError Lib "wsock32.dll" () As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal


hwnd
As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"


(ByVal
lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam


As
Long, ByVal lParam As Long) As Long
Public Declare Function WSAIsBlocking Lib "wsock32.dll" () As Long
Public Declare Function WSACleanup Lib "wsock32.dll" () As Long
Public Declare Function Send Lib "wsock32.dll" Alias "send" (ByVal s As


Long,
buf As Any, ByVal buflen As Long, ByVal flags As Long) As Long
Public Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As


Any,
ByVal buflen As Long, ByVal flags As Long) As Long
Public Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVR As Long,


lpWSAD
As WSADataType) As Long
Public Declare Function htons Lib "wsock32.dll" (ByVal hostshort As Long)


As
Integer
Public Declare Function ntohs Lib "wsock32.dll" (ByVal netshort As Long)


As
Integer
Public Declare Function socket Lib "wsock32.dll" (ByVal af As Long, ByVal


s_type
As Long, ByVal protocol As Long) As Long
Public Declare Function closesocket Lib "wsock32.dll" (ByVal s As Long) As


Long
Public Declare Function Connect Lib "wsock32.dll" Alias "connect" (ByVal s


As
Long, addr As sockaddr, ByVal namelen As Long) As Long
Public Declare Function WSAAsyncSelect Lib "wsock32.dll" (ByVal s As Long,


ByVal
hwnd As Long, ByVal wMsg As Long, ByVal lEvent As Long) As Long
Public Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String)


As Long
Public Declare Function gethostbyname Lib "wsock32.dll" (ByVal host_name


As
String) As Long
Public Declare Sub MemCopy Lib "kernel32" Alias "RtlMoveMemory" (Dest As


Any,
Src As Any, ByVal cb&)
Public Declare Function inet_ntoa Lib "wsock32.dll" (ByVal inn As Long) As


Long
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal


lpString
As Any) As Long
Public Declare Function WSACancelBlockingCall Lib "wsock32.dll" () As Long


voila ....
bonne chance ....
--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr

http://forums.club-internet.fr/