Page 1 sur 1

activation d'un bouton sur une page web

Publié : jeu. 08/nov./2012 20:48
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

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 17:18
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?

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 17:43
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 ?!

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 17:54
par nico
Le nom de l'appli pour faire des tests!

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 18:02
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

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 20:22
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.

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 21:33
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

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 23:03
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")

Re: activation d'un bouton sur une page web

Publié : ven. 09/nov./2012 23:14
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)

Re: activation d'un bouton sur une page web

Publié : sam. 10/nov./2012 18:11
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 ?

Re: activation d'un bouton sur une page web

Publié : dim. 11/nov./2012 18:17
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.