IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

l'API wininet et ses fonctions ?


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut l'API wininet et ses fonctions ?
    Bonjour à tous,

    Comme je travaille sur MASM32 je suis obligé d'utiliser l'API wininet, winhttp n'étant pas à priori utilisable.
    Les functions sont bien décrites sur MSDN mais les exemples sont très pauvres voir inexistants et je n'arrive pas à trouver le vieux SDK32 sur lequel il y en avait peut-être.

    Je suis quand même arrivé à utiliser les fonctions courantes car il y a par ci par là quelques infos.

    En ce moment je bloque sur la transmission de données vers un formulaire multipart et la fonction HttpAddRequestHeaders, obligatoire dans ce cas, me pose problème.
    J'ai plusieurs données à envoyer et si j'utilise un appel par donnée je ne les voit pas passer sur wireshark que j'utilise pour monitorer le dialogue.
    Si j'englobe toutes les données dans un seul appel j'ai une erreur.

    Quelqu'un aurait-il une piste vers un exemple, en assembleur de préférence car je ne connais pas les autres langages ?

    Merci.

    P.S: je suis allé consulter les RFC HTTP mais j'ai du mal à trouver une explication interpretable sans avoir à assimiler une foule données ce qui me prendrait trop de temps

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Tu peux nous montrer ce que tu as écrit ? (même si je trouve MASM à ch*er, un vrai assembleur comme NASM ou FASM pour faire plaisir à edfed serait mieux :p ).
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par supersnail Voir le message
    Bonjour,

    Tu peux nous montrer ce que tu as écrit ? (même si je trouve MASM à ch*er, un vrai assembleur comme NASM ou FASM pour faire plaisir à edfed serait mieux :p ).
    Bonjour Supersnail,

    Le code serait un peu compliqué à transposer.
    Je dois envoyer des données à un formulaire qui doit recevoir plusieurs parties (multipart), un champs rempli par l'utilisateur, un champ rempli par le serveur, des valeurs qui spécifient l'opération et l'événement demandés et une pile de données transmises sur la page.

    J'utilise les fonctions suivantes :
    - InternetOpen

    - InternetConnect

    - HttpOpenRequest

    - HttpSendRequest

    - HttpAddRequestHeaders

    Pour declarer le multipart je dois déclarer le boundary :
    "Content-Type: multipart/data; boundary=---------------------------7db1d5181e1344"

    Et ensuite préparer l'entête pour qu'il contienne bien chaque valeur à transmettre mais déjà à la base quand je trace les requêtes avec wireshark ma définition de boundary ne part pas.

    J'ai essayé diverses combinaisons avec HttpAddRequestHeaders, valeur par valeur, par bloc complet pour ressembler à ce qu'envoi mon navigateur tracé avec wireshark.
    Je crois que mon code doit avoir une erreur par ligne et que l'ordre des requêtes est plus que mauvais.
    Je n'arrive pas à trouver d'exemple de multipart autre que dans le cas de chargement de fichier.
    Sur le site de windows les exemples sont inexistants et le SDK a oublié wininet.

    Merci

    PS, avant d'arriver sur cette page j'ai franchi toutes les étapes d'authentification et d'ouverture de page pour y arriver avec succès mais en restant bloqué sur le multipart...

  4. #4
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Je pense qu'il s'agit plus d'un problème avec WinHTTP qu'avec l'assembleur. Regarde ici pour plus d'informations: http://www.ms-news.net/f4005/winhttp...ta-206893.html

    Malgré tout, je pense que d'utiliser directement les sockets pour ce genre d'opérations peut être plus confortable que de se battre avec une API récalcitrante
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Oui effectivement mon blocage ne vient pas de la partie assembleur car au fur et à mesure de mes recherches je m'apercois qu'il faudrait que j'ai d'abord de bonnes bases sur la construction et l'envoi d'un header mais j'ai pas le temps. L'utilisation de winsock me poserait donc encore plus de problème car il faudrait que je construise tout sans même savoir comment envoyer les requetes nécessaires pour simplement ouvrir une page html.

    J'ai négligé la piste Winhttp pour pouvoir me débrouiller avec Wininet car un header ne dépend pas de l'API utilisé, je vais chercher de ce coté.

    En plus le formulaire que je dois remplir est dans une page avec du code qui ne cherche pas la simplicité, je dois donc d'abord maitriser la construction d'un header avec HttpAddRequestHeaders car je sens que je vais encore avoir de mauvaise surprises.

    Merci supersnail

    @+

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Re-salut à tous,

    Après pal mal de recherches je bloque toujours.

    Comme dit avant je n'ai pas d'autre choix que d'utiliser wininet.

    Je n'arrive pas à comprendre les subtilités des entêtes et winhttp ne m'est d'aucun secours pour comprendre comment utiliser un addrequestheaders avec wininet.
    L'un spécifie que l'entête envoyé doit se terminer par un CRLF ou un zero final et l'autre ne parle que d'un CRLF.

    Il y a des livres dédiés à wininet mais en anglais et je suis NULL pour ce langage.

    Google qui n'est pas mon ami à moi, oui çà arrive, ne m'a été d'aucun secours pour trouver un exemple compréhensible qui utilise un wininet httpaddrequestheaders pour remplir un formulaire multipart avec plusieurs "boundary".

    Il y a bien des exemples avec un boundary pour l'upload d'un fichier mais c'est pour un seul boundary et le texte qui est envoyé n'est pas avec un format spécifé dans le source, comme par exemple (faux ?) :

    texte1 "boundary=--------->123456",0Dh,0Ah,0
    texte2 "--------->123456",0Dh,0Ah,"gateway=10.0.0.1",0Dh,0Ah,0
    texte3 "--------->123456",0Dh,0Ah,"mask=255.255.255.0",0Dh,0Ah,0
    texte4 "--------->123456",0Dh,0Ah,"ip=10.0.0.1",0Dh,0Ah,0
    texte5 "--------->123456-",0Dh,0Ah,0

    Il doit bien y avoir quelque part sur la toile un exemple qui existe

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    un peu plus de précisions :

    en me basant sur un exemple tiré de :

    http://www.w3.org/TR/html401/interac...ml#h-17.13.4.2

    texte1 db "Content-Type: multipart/form-data; boundary=AaB03x",0dh,0ah,0dh,0ah,0

    invoke HttpAddRequestHeaders,hRequest,offset texte1,-1,HTTP_ADDREQ_FLAG_ADD

    passe sans erreur

    pour la suite

    texte2 db "--AaB03x",0dh,0ah,0

    invoke HttpAddRequestHeaders,hRequest,offset texte2,-1,HTTP_ADDREQ_FLAG_ADD

    j'ai l'erreur 87, windows n'envoie pas la requete car je ne la voit pas en monitoring avec wireshark

    si je continue à envoyer :

    db 'Content-Disposition: form-data; name="....'+HttpAddRequestHeaders

    pas d'erreur et les requete ne sont pas bloquées mais bien sûr le serveur ne me prends pas les données

    J'ai essayé de grouper l'envoi du boundary avec le form-data name + données toujours par rapport à l'exemple en reproduisant le nombre de CRLF nécessaires (je met l'extrait de l'exemple):
    --AaB03x
    Content-Disposition: form-data; name="submit-name"

    Larry

    ET toujour erreur 87, à priori c'est le boundary qui bloque...

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    S'il s'agit de communiquer avec une pge Html (formulaire),le chemin n'est pas
    le bon.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par ToutEnMasm Voir le message
    S'il s'agit de communiquer avec une pge Html (formulaire),le chemin n'est pas
    le bon.
    Bonjour ToutEnMasm,

    C'est plus sympa de parler en français

    Oui c'est un formulaire mutipart intégré dans une page /default.html qui demande une authentification avant de charger les informations de champs affichés ensuite selon le type de demande.
    La page reste avec le même chemin de départ.
    Le 1er HttpAddRequestHeaders avec Content-Type: multipart/form-data; boundary=" " passe sans erreur par contre à partir du moment ou le "boundary" est envoyé il y a erreur

    J'ai pensé que le problème pouvait provenir de HttpOpenRequest avec le lplpszAcceptTypes (en cours de recherche sur le forum masm32) qui devrait être spécifié mais pour l'instant je n'ai pas trouvé d'infos.

    Tous les exemples que j'ai trouvé sur le net sont incomplets ou faux comme par exemple le format du boundary qui doit être précédé de 2 "-" pour chaque partie et aussi suivi de 2 "--" pour fermer les parties selon la rfc dont je ne me souviens plus du N°

    Mes lpszVerb, lpszObjectName, lpszVersion sont remplis comme les infos envoyées par IE que j'ai capturées avec wireshark
    Je vais regarder si le lpszReferer que je n'ai pas précisé pourrait jouer.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par statism Voir le message
    Bonjour ToutEnMasm,

    C'est plus sympa de parler en français

    Oui c'est un formulaire mutipart intégré dans une page /default.html qui demande une authentification avant de charger les informations de champs affichés ensuite selon le type de demande.
    La page reste avec le même chemin de départ.
    Le 1er HttpAddRequestHeaders avec Content-Type: multipart/form-data; boundary=" " passe sans erreur par contre à partir du moment ou le "boundary" est envoyé il y a erreur

    J'ai pensé que le problème pouvait provenir de HttpOpenRequest avec le lplpszAcceptTypes (en cours de recherche sur le forum masm32) qui devrait être spécifié mais pour l'instant je n'ai pas trouvé d'infos.

    Tous les exemples que j'ai trouvé sur le net sont incomplets ou faux comme par exemple le format du boundary qui doit être précédé de 2 "-" pour chaque partie et aussi suivi de 2 "--" pour fermer les parties selon la rfc dont je ne me souviens plus du N°

    Mes lpszVerb, lpszObjectName, lpszVersion sont remplis comme les infos envoyées par IE que j'ai capturées avec wireshark
    Je vais regarder si le lpszReferer que je n'ai pas précisé pourrait jouer.
    J'ai verifié le chemin il est bien envoyé comme IE le fait
    J'ai essayé de compléter lpszReferer comme IE pas d'erreur sur la partie HttpOpenRequest mais toujours pareil en étape 2 des HttpAddRequestHeaders
    J'ai essayé d'envoyer en accept le texte complet envoyé par IE pas d'erreur sur la partie HttpOpenRequest mais toujours pareil en étape 2 des HttpAddRequestHeaders et je ne vois pas la requête partir sur wireshark

  11. #11
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    Salut,
    L'ideal serait de faire un petit bout de code exposant le problème rencontré.
    Un peu de code,une page html,c'est peu d'efforts et on évite de tourner en rond.
    Un de mes sources,sur asm.fr,donne un exemple de dialog avec une page.
    Les API utilisées permettent de remplir une boite d'édition et d'appuyer sur un
    bouton.
    Besoin de plus ?.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par ToutEnMasm Voir le message
    Salut,
    L'ideal serait de faire un petit bout de code exposant le problème rencontré.
    Un peu de code,une page html,c'est peu d'efforts et on évite de tourner en rond.
    Un de mes sources,sur asm.fr,donne un exemple de dialog avec une page.
    Les API utilisées permettent de remplir une boite d'édition et d'appuyer sur un
    bouton.
    Besoin de plus ?.
    Merci TouEnMasm

    Pour un formulaire "normal" je sais faire, c'est un multipart avec datas multiples (pas de fichier à envoyer au serveur) qui me pose soucis.
    J'ai un post sur le forum masm qui est ouvert on m'a demandé du code (alors qu'il y en avait déjà assez pour montrer le problème) etc et depuis que j'ai été plus précis plus de réponse...

    Je ne sais pas comment faire un post qui soit réservé à ceux qui savent utiliser la DLL wininet parfaitement pour que personne ne perde de temps pour rien.
    Je remercie tout le monde d'avoir essayer de me trouver une solution alors qu'en fait ce n'est pas une solution de contournement que je recherche mais le bon process pour envoyer des boundary's avec wininet sans avoir de retour d'erreur.
    Le process concernant le dialogue avec un formulaire multipart est décrit dans les RFC dédiés mais la documentation de la DLL wininet ne permet pas de savoir comment le respecter dans sa transcription logicielle...

  13. #13
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    Depuis le temps que j'entend parler de ton code posté,j'aimerais bien voir la couleur d'un lien vers lui ou une indication suffisament précise.
    Spécialiste Wininet ?????

Discussions similaires

  1. Dupliquer un clip avec ses fonctions.
    Par dialga dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/11/2008, 09h41
  2. api wininet fonction InternetOpenUrl
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/07/2008, 22h50
  3. API Windows différence entre fonctions simple EX et A
    Par Astraya dans le forum Windows
    Réponses: 3
    Dernier message: 11/02/2008, 09h39
  4. Faire ses fonctions VBA
    Par antoine46 dans le forum Access
    Réponses: 5
    Dernier message: 11/08/2006, 21h10
  5. Quel SGBD permet d'écrire ses fonctions d'agrégation SQL?
    Par Machin0410 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 28/03/2006, 17h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo