activation d'un bouton sur une page web

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

activation d'un bouton sur une page web

Message par graph100 »

Salut !

j'ai une page web qui vient d'un serveur de mon tèl, j'ai besoin d'interagir dessus avec une appli en pb.
Cette page contient des boutons codés à peu près comme suis :

Code : Tout sélectionner

<input type="button" onclick="ipwajax('enabletorch')" value="Allumer la LED"/>
ça sert à allumer le flash du portable (pratique :) )

je ne vois pas comment éviter d'afficher la page, et de me faire une interface qui communique avec.
Pour le moment mon truc arrive à récupérer les fichiers partagés par le serveur en utilisant une procédure de dl de fichier avec les api window (récup sur le forum) car celle de pb ne fonctionne pas : le fichier n'est pas entièrement récupéré.

voila ! Merci de votre aide :P
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: activation d'un bouton sur une page web

Message par nico »

J'ai rien compris.

T'as une page web qui s'affiche sur le téléphone, tu veux récupérer cette page avec une appli en PB donc sur un PC

et là, je ne comprends pas:
je ne vois pas comment éviter d'afficher la page,
Tu veux dire récupérer la page sans avoir à afficher celle ci dans un gadget Web?
et de me faire une interface qui communique avec.
Communiquer avec quoi? pour faire quoi?


Cette page web qui permet de piloter le téléphone doit être réalisé dans un langage de programmation, non?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: activation d'un bouton sur une page web

Message par graph100 »

oula !! Je m'aperçois que je n'ai pas été clair :oops:

Donc, d'un coté j'ai mon téléphone, dessus j'ai une appli qui est un serveur web.
Ce serveur est accessible par le biais du wifi depuis tout les ordinateurs connectés sur ce wifi.
On y accède par son adresse qui est du genre : http://192.168.0.x/serveur.html

De l'autre coté j'ai mon pc, et un navigateur pour afficher cette page web et l'utiliser.
Maintenant ce que je veux faire, c'est automatiser une procédure et la rendre disponible à un de mes programmes PB.
On a accès à la page qui m'intéresse avec une url.

Cette page a donc des boutons, (dont j'ai mis le code plus haut) pour activer certaines fonctions du portable.
Notamment le flash, la mise au point de l'appareil photo.

Mon objectif : utiliser cette page html depuis le prog PB.
Quand je dis sans l'afficher, c'est parce que je ne veux pas afficher la page dans le webgadget() et cliquer sur le bouton à la souris.

Je l'avais fait il y a 3-4 ans, mais sous un batch linux, donc ça ne doit pas du tout être de la même façon ?!
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: activation d'un bouton sur une page web

Message par nico »

Le nom de l'appli pour faire des tests!
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: activation d'un bouton sur une page web

Message par graph100 »

l'appli sur Android c'est "Ip WebCam".

Entre temps j'ai fouillé un peu dans mes fichiers, et j'ai trouvé le script dont je me servais pour utiliser les boutons à partir d'un code, mais c'est du ssh je crois (fichier *.sh) et c'étais sur un serveur linux.

Code : Tout sélectionner

wget --post-data="username=nomutilisateur&password=motdepasse&exec_cgis=login_CGI" \
	http://$1/cgi-bin/login.exe \
	--save-cookies cookies.$1.txt >> /dev/null 2>/dev/null
Ce code permettais de se connecter sur une livebox en ligne de commande.
Il est un peu compliqué car cela passait par l'utilisation des cookies et de plusieurs bouton. L'objectif final étant de lancer le redémarrage de la box lorsque qu'on détectait qu'elle était plantée (ce qui arrivait au moins une fois par semaine)

Je ne vois pas trop comment l'utiliser en pb, car il faudrait un équivalent de wget
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: activation d'un bouton sur une page web

Message par nico »

Tu peux commencer en lançant une requête GET:
GET /enabletorch HTTP/1.1
Host: 192.168.1.74:8080
Connection: keep-alive
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Accept: */*
Referer: http://192.168.1.74:8080/remote.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Je n'ai pas codé car la fonction flash ne fonctionne pas chez moi; si t'as des problèmes pour codé cette requête, dis le moi.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: activation d'un bouton sur une page web

Message par graph100 »

Je n'ai pas la moindre idée de comment lancer une requête de ce type en PB.
mais je vais chercher un détail sur les fofo. Si je n'y arrive pas je reposterais.

merci
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: activation d'un bouton sur une page web

Message par nico »

Voici un premier jet, tiens moi au courant!
Pour que ça marche, je pense qu'il faut établir une connection avant!

Code : Tout sélectionner

#INTERNET_OPEN_TYPE_DIRECT = 1
#INTERNET_OPTION_RECEIVE_TIMEOUT=6
#INTERNET_OPTION_SEND_TIMEOUT=5
#INTERNET_SERVICE_HTTP = 3
#INTERNET_FLAG_RELOAD=$80000000
#HTTP_ADDREQ_FLAG_ADD = $20000000
#HTTP_ADDREQ_FLAG_REPLACE = $80000000
#HTTP_QUERY_RAW_HEADERS_CRLF=22

Procedure.s GetHttp(host.s, Port.l, url.s)
  Protected open_handle.i, connect_handle.i, request_handle.i
  Protected headers.s, headers1.s, headers2.s, HeaderReponse.s, LenHeader.l
  Protected bytes_read.l, dwTimeOut.l, Buffer.s, Result.s
  
  open_handle = InternetOpen_("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11", #INTERNET_OPEN_TYPE_DIRECT, "", "", 0)
  
  If open_handle
    connect_handle = InternetConnect_(open_handle, host, Port, "", "", #INTERNET_SERVICE_HTTP, 0, 0)
    
    If connect_handle
      request_handle = HttpOpenRequest_(connect_handle, "GET", url, "HTTP/1.1", "", 0, #INTERNET_FLAG_RELOAD ,0)
      
      If request_handle
        headers1.s = "Connection: keep-alive" + #CRLF$
        headers2.s = "X-Requested-With: XMLHttpRequest" + #CRLF$
        
        
        headers = headers1 + headers2
        
        
        If HttpAddRequestHeaders_(request_handle, headers, Len(headers), #HTTP_ADDREQ_FLAG_REPLACE | #HTTP_ADDREQ_FLAG_ADD) <> 0
          
          
          dwTimeOut.l=10*500
          InternetSetOption_(request_handle, #INTERNET_OPTION_RECEIVE_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut))
          
          InternetSetOption_(request_handle, #INTERNET_OPTION_SEND_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut))
          
          If HttpSendRequest_(request_handle, "", 0, 0, 0) <> 0
            
            HeaderReponse=Space(2048)
            LenHeader.l=2048
            
            If HttpQueryInfo_(request_handle, #HTTP_QUERY_RAW_HEADERS_CRLF, @HeaderReponse, @LenHeader, #Null) <> 0
              
              HeaderReponse = Trim(HeaderReponse)
              
              buffer = Space(1024)
              
              While  InternetReadFile_(request_handle, @buffer, 1024, @bytes_read) = 1
                
                If bytes_read=0
                  Break
                EndIf 
                
                result + Trim(PeekS(@buffer,bytes_read, #PB_Ascii))
                buffer = Space(1024)
                
              Wend 
              result = HeaderReponse + result
            EndIf 
          EndIf
        EndIf
        InternetCloseHandle_(request_handle)
      EndIf
      InternetCloseHandle_(connect_handle)
    EndIf
    InternetCloseHandle_(open_handle)
  EndIf
  
  ProcedureReturn result
EndProcedure

Debug GetHttp(adresse ip du téléphone", 8080, "/enabletorch")
Delay(2000)
Debug GetHttp(adresse ip du téléphone", 8080, "/disabletorch")
Dernière modification par nico le ven. 09/nov./2012 23:18, modifié 1 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: activation d'un bouton sur une page web

Message par nico »

En fait, je viens de m'apercevoir que le flash ne se commande pas lorsqu'on choisit la caméra avant (assez logique), donc j'ai pu tester le code et ça marche nickel, il n'y a pas besoin d'établir une connection avec un navigateur au préalable (pour des problèmes de cookie par exemple)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: activation d'un bouton sur une page web

Message par graph100 »

effectivement, ça fonctionne bien.
Je ne comprend malheureusement pas grand chose du code...Mais, le gros paté du milieu ne sert qu'à récupérer la réponse du serveur, c'est ça ?

et comment tu as su qu'il fallait juste envoyé une requête du type :

Code : Tout sélectionner

192.168.1.x:8080/enabletorch
D'ailleurs si on copie/colle ça dans un navigateur, le flash s'allume.

En partant de ce que tu fourni à ta procédure, et une procédure que j'avais pour dl un fichier, je fais ça :

Code : Tout sélectionner

Procedure.l ReadUrlFile(URL.s, OpenType.b=1, ProxyAndPort.s="")
  ;  OpenType
  ; 1 INTERNET_OPEN_TYPE_DIRECT (Resolves all host names locally.)
  ; 0 INTERNET_OPEN_TYPE_PRECONFIG (Retrieves the proxy Or direct configuration from the registry)
  ; 4 INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  (Retrieves the proxy Or direct configuration from the registry And prevents the use of a startup Microsoft JScript Or Internet Setup (INS) file.)
  ; 3 INTERNET_OPEN_TYPE_PROXY (Passes requests To the proxy unless a proxy bypass list is supplied And the name To be resolved bypasses the proxy. In this Case, the function uses INTERNET_OPEN_TYPE_DIRECT. )
 
  isLoop.b=1
  INET_RELOAD.l = $80000000
  hInet.l=0
  hURL.l=0
  Bytes.l=0
  
  
  taille_totale.l = 0
 
  hInet = InternetOpen_("", OpenType, ProxyAndPort, "", 0)
  hURL = InternetOpenUrl_(hInet, URL, #Null, 0, INET_RELOAD, 0)
  
  
  InternetCloseHandle_(hURL)
  InternetCloseHandle_(hInet)
  
  ProcedureReturn taille_totale
EndProcedure

ReadUrlFile("http://192.168.1.x:8080/enabletorch")

Delay(2000)

ReadUrlFile("http://192.168.1.x:8080/disabletorch")
Mais ça ne doit pas être propre non ? (ça fonctionne)

Dans tout les cas les fonctions appelées par les boutons sont appelée par des url partant de la racine du serveur ? Je ne comprend pas comment tu as fait pour trouver ça ?! C'est un standard ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: activation d'un bouton sur une page web

Message par nico »

Mais ça ne doit pas être propre non ? (ça fonctionne)
Disons qu'il n'y a pas de valeur de retour, il me semble essentiel de connaitre l'en tête de la réponse pour traiter d'éventuelles erreurs.
Dans tout les cas les fonctions appelées par les boutons sont appelée par des url partant de la racine du serveur ?
En principe oui, en fait quand tu cliques sur un bouton, ça renvoi une requête de type GET ou POST vers une page PHP mais ça peut être aussi un email (formulaire de contact)
Je ne comprend pas comment tu as fait pour trouver ça ?! C'est un standard ?
Oui, c'est le standard HTTP, qui est très simple à la base.

Il y a des extensions pour les navigateurs (chrome et firefox) pour voir transiter les requêtes entre le navigateur et le serveur.

Mais là, j'ai utilisé Fiddler2 (gratuit), un programme à part qui surveille les ports http et https entre autres choses de tout ce qui transite sur le PC.
Répondre