Webgadget et retour

Codes specifiques à Windows
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

non j'ai pas, le serveur n'est pas à moi, je ne sais donc pas quel header il s'attend à avoir.

Pourquoi un truc si simple en théorie est si compliqué à mettre en place ...
.:NY152:.
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Webgadget et retour

Message par JohnJohnsonSHERMAN »

Mmm as tu déjà réussi à mettre en oeuvre ce dont tu parles? Y compris par un moyen extérieur à PB (navigateur web, autre application...) ?

Si c'est le cas on pourrait tenter de voir quel est le header envoyé, et le reproduire avec PB... :P
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

Je vais être le plus précis possible et donner toutes les infos ^^

Dans l'optique d'être utilisée sur une machine Windows et Linux (serveurs de stockage pseudo NAS), je veux développer une application envoyant des SMS en vue d'être prévenu dans certaines conditions. J'utilise pour ça le service de SMS que Free m'offre avec ma ligne mobile.

Free renvoi un header HTTP selon cette liste une fois l'url validée :

Code : Tout sélectionner

200 : Le SMS a été envoyé sur votre mobile.
400 : Un des paramètres obligatoires est manquant.
402 : Trop de SMS ont été envoyés en trop peu de temps.
403 : Le service n'est pas activé sur l'espace abonné, ou login / clé incorrect.
500 : Erreur côté serveur. Veuillez réessayer ultérieurement.
L'url est composée de la sorte :

Code : Tout sélectionner

https://smsapi.free-mobile.fr/sendmsg?user=IDENTIFIANT&pass=PASSWORD&msg=Hello+World+!
Les mots du message envoyé doivent être séparés par des + pas des espaces ou des %20 sous peine de recevoir un message difficilement compréhensible.

Si cette url est utilisée sur un navigateur ou un WebGadget, le SMS est bien reçu mais point de récupération du header

Si cette url est utilisée avec GetHTTPHeader(), l'url est mal interprétée et une erreur 400 est reçue, pas de SMS envoyé ...

J'espère avoir été précis sur ce que je veux etc ^^
.:NY152:.
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Webgadget et retour

Message par JohnJohnsonSHERMAN »

Mmm le probléme semble assez compliqué en effet :(

Je pense que ca vient du fait que pour récupérer le header, GetHTTPeader() doit envoyer une requête HEAD, là ou le serveur s'attend à une requête GET (ce qu'un navigateur enverrait normalement...). On devrait pouvoir se bricoler un truc pour envoyer la bonne requête

J'ai essayé d'envoyer manuellement les requêtes comme ceci :

Code : Tout sélectionner

#Type$ = "GET"
#InputBufferSize = 1024

*in = AllocateMemory(#InputBufferSize)

If InitNetwork()
  User$ = "user"
  Passwd$ = "password"
  Message$ = "Ceci est un joli message que l'on peut modifier !"
  
  URL$ = "http://smsapi.free-mobile.fr/sendmsg?user="+User$+"&pass="+Passwd$+"&msg="+ReplaceString(Message$," ","+")
  
  socket = OpenNetworkConnection("http://smsapi.free-mobile.fr/",80)
  
  If socket
    SendNetworkString(socket, "HTTP/1.1 "+#Type$+" "+URL$+#CRLF$+#CRLF$,#PB_UTF8);Le double CRLF marque la fin de la requête
    
    Repeat
      sEvent = NetworkClientEvent(socket)
      
      Select sEvent
        Case #PB_NetworkEvent_Data
          recSize = ReceiveNetworkData(socket,*in,#InputBufferSize)
          Debug PeekS(*in,recSize,#PB_UTF8)
          
        Case #PB_NetworkEvent_Disconnect
          Debug "Déconnecté du serveur"
          End
          
        Default
          Delay(50)
          
      EndSelect
      
    ForEver 
  Else
    Debug "Impossible de se connecter au serveur !"
  EndIf
Else
  Debug "Impossible d'initialiser le réseau !"
EndIf

        
Mais la connection au serveur avec OpenNetworkConnection() échoue. Que ce soit en HTTP ou en HTTPS ca échoue toujours. Aprés je ne sais pas comment on pourrait faire en HTTPS, ma connaissance du réseau s'arrête à l'HTTP...
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Webgadget et retour

Message par cage »

@NY152
Dommage que tu n'ai pas lu mon message en essayant de comprendre ma démarche.
Voici comment je pratique avec wget (Windows et Linux/Unix)

Code : Tout sélectionner

D:\>wget "https://smsapi.free-mobile.fr/sendmsg?user=%USER%&pass=%PASS%&msg=Hello+World+!"
--2017-04-23 14:33:42--  https://smsapi.free-mobile.fr/sendmsg?user=%USER%&pass=%PASS%&msg=Hello+World+!
Resolving smsapi.free-mobile.fr... 212.27.40.200
Connecting to smsapi.free-mobile.fr|212.27.40.200|:443... connected.
ERROR: cannot verify smsapi.free-mobile.fr's certificate, issued by `/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3':
  Unable to locally verify the issuer's authority.
ERROR: certificate common name `*.free.fr' doesn't match requested host name `smsapi.free-mobile.fr'.
To connect to smsapi.free-mobile.fr insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

D:\>
Suite au message d'erreur, nouvelle tentative avec l'option --no-check-certificate

Code : Tout sélectionner

D:\>wget --no-check-certificate "https://smsapi.free-mobile.fr/sendmsg?user=%USER%&pass=%PASS%&msg=Hello+World+!"
--2017-04-23 14:27:52--  https://smsapi.free-mobile.fr/sendmsg?user=%USER%&pass=%PASS%&msg=Hello+World+!
Resolving smsapi.free-mobile.fr... 212.27.40.200
Connecting to smsapi.free-mobile.fr|212.27.40.200|:443... connected.
WARNING: cannot verify smsapi.free-mobile.fr's certificate, issued by `/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3':
  Unable to locally verify the issuer's authority.
WARNING: certificate common name `*.free.fr' doesn't match requested host name `smsapi.free-mobile.fr'.
HTTP request sent, awaiting response... 200 OK
Length: unspecified
Saving to: `sendmsg@user=%USER%&pass=%PASS%&msg=Hello+World+!'

    [ <=>                                                                                                             ] 0           --.-K/s   in 0s

2017-04-23 14:27:53 (0.00 B/s) - `sendmsg@user=%USER%&pass=%PASS%&msg=Hello+World+!' saved [0]


D:\>
Je reçois bien le SMS
Dans les requêtes, remplacer %USER% et %PASS% par tes identifiants.
Il est donc clair que GetHTTPHeader() ne fonctionnera pas, par contre libcurl devrait pouvoir faire l'affaire.
A creuser, car je n'ai pas fait de tests dans ce sens.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

Perso, j'ai regardé du côté de libcurl et c'est très fouilli, ça ne fonctionne pas en EnableExplicit et j'ai tout un tas d'erreur de linkage.

si il faut tout réadapter, je laisse tomber cette voie, j'ai d'autres parties plus importantes à traiter avant ça
.:NY152:.
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Webgadget et retour

Message par Marc56 »

NY152 a écrit :

Code : Tout sélectionner

https://...
Les mots du message envoyé doivent être séparés par des + pas des espaces ou des %20 sous peine de recevoir un message difficilement compréhensible.

Si cette url est utilisée sur un navigateur ou un WebGadget, le SMS est bien reçu mais point de récupération du header

Si cette url est utilisée avec GetHTTPHeader(), l'url est mal interprétée et une erreur 400 est reçue, pas de SMS envoyé
En https, tout est crypté, y compris l'entête et les passages de paramètres.
https://en.wikipedia.org/wiki/HTTPS#Network_layers
http://stackoverflow.com/questions/1876 ... -encrypted

Il est donc normal que les fonctions HTTP (pas s) ne PB ne puissent ni envoyer une url correcte ni décrypter le retour.
Le Webgadget quant à lui y arrive car il s'appuie sur IE et gère les certificats.
Au besoin utilise le webgadget dans une fenêtre masquée.

:wink:
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

c'est ce que je fais en attendant du coup mais dans ce cas je ne peux pas savoir si le SMS est envoyé, ou tout autre erreur (indiqué par le header)
.:NY152:.
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Webgadget et retour

Message par cage »

@NY152: Pour inclure la libcurl dans PB en évitant les erreurs

Code : Tout sélectionner

DisableExplicit
XIncludeFile "libcurl.pbi"
EnableExplicit
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Webgadget et retour

Message par Ar-S »

J'utilise ça depuis un moment, je ne me prends pas le choux avec le header, je n'ai jamais eu de soucis de réception.

Code : Tout sélectionner

Enumeration
  #Win
  #BT
  #BTA
  #Webg
  #EDITOR
EndEnumeration

InitNetwork()


Procedure exit()
  End
EndProcedure


OpenWindow(#win,#PB_Ignore,#PB_Ignore,300,160,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(#Win,$e3e3e3)

WebGadget(#WEBG,1,1,1,1,"")
ButtonGadget(#BT,1,1,298,25,"Envoyer à Cyrille")
EditorGadget(#EDITOR,1,28,298,100,#PB_Editor_WordWrap)
ButtonGadget(#BTA,1,130,298,25,"Envoyer à Amandine")
BindEvent(#PB_Event_CloseWindow, @Exit() )

Repeat 
  WaitWindowEvent() 
  If Event() = #PB_Event_Gadget 
    Select EventGadget() 
      Case #BT
        MONMESSAGE.s = URLEncoder(GetGadgetText(#EDITOR))
        SetGadgetText(#WEBG,"https://smsapi.free-mobile.fr/sendmsg?user=MONID&pass=MACLE&msg="+MONMESSAGE.s)
        
      Case #BTA
        MONMESSAGE.s = URLEncoder(GetGadgetText(#EDITOR))
        SetGadgetText(#WEBG,"https://smsapi.free-mobile.fr/sendmsg?user=IDDEMABIBI&pass=SACLE&msg="+MONMESSAGE.s)

    EndSelect
  EndIf
  

ForEver
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

Je ne doute pas du fonctionnement mais je voulais connaitre l'état à chaque envoi (le serveur pouvant être hors ligne à certains moment, si un envoi était tenté pendant cette période (ou tout autre erreur), je voudrais savoir le pourquoi du comment ^^
.:NY152:.
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Webgadget et retour

Message par cage »

Test du serveur d'envoi des SMS

Code : Tout sélectionner

url$ = "https://smsapi.free-mobile.fr/sendmsg"

If InitNetwork()
  header$ = GetHTTPHeader(url$)
  Debug header$
EndIf
Le code retourné:

Code : Tout sélectionner

HTTP/1.1 400 Bad Request
Server: nginx
Date: Tue, 25 Apr 2017 14:32:37 GMT
Connection: keep-alive
Si le code retourné contient "400 Bad Request", alors le serveur est vivant.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Webgadget et retour

Message par cage »

J'ai joué avec libcurl pour voir si on peut récupérer le code de retour

Code : Tout sélectionner

;
;************************************************************************
;Titre      : freemobilesms.pb
;Auteur     : (c) 2017 CAGE
;Date       : 2017/04/25
;Version PB : PureBasic 5.60 (Windows - x86)
;Version PB : PureBasic 5.60 (Windows - x64)
;Compiler Options
;Compiler Options : Create threadsafe executable
;Compiler Options : Enable moderm theme support (for Windows X and above)
;Compile/Run      : Create temporary executable in the source directory
;
;Libairies: libcurl.pbi
;
;https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl
;************************************************************************
;

EnableExplicit ; toutes les variables doivent êtres déclarées

OnErrorGoto(?ErrorHandler)

Define user$ = "12345678" ; a remplacer par votre identifiant
Define pass$ = "azert1qsdfghjk" ; a remplacer par votre code de sécurité
Define msg$  = "Hello+World+!" ; a remplacer par votre message

Define url_sms$ = "https://smsapi.free-mobile.fr/sendmsg?user="+user$+"&pass="+pass$+"&msg="+msg$

DisableExplicit
XIncludeFile ".\pb-libcurl.pbi"
EnableExplicit

If InitNetwork()
  Define curl = curl_easy_init()
  Define header.s
  header  = str2curl("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063")
  header  = str2curl("Pragma: no-cache")
  header  = str2curl("Host: smsapi.free-mobile.fr")
  header  = str2curl("Connection: keep-alive")
  
  If curl
    Debug "CURL"
    Define *header, res, url.s, resData.s, resHTTP.s
    url.s = str2curl(url_sms$)
    curl_easy_setopt(curl,#CURLOPT_URL,@url)
    curl_easy_setopt(curl,#CURLOPT_IPRESOLVE,#CURL_IPRESOLVE_V4)
    curl_easy_setopt(curl,#CURLOPT_TIMEOUT,30)
    *header = curl_slist_append(0,header)
    curl_easy_setopt(curl,#CURLOPT_HTTPHEADER,*header)
    curl_easy_setopt(curl,#CURLOPT_WRITEFUNCTION,@curlWriteData())
    res = curl_easy_perform(curl)
    resData = curlGetData()
    curl_easy_getinfo(curl,#CURLINFO_RESPONSE_CODE,@resHTTP) ; a tester avec autre info
    Debug "res="+res
    Debug "HTTP code: " + resHTTP
    Debug "HTTP data: " + #CRLF$ + resData
    curl_easy_cleanup(curl)
  EndIf ; ................. If curl
EndIf ; ................... If InitNetwork()

ErrorHandler:

End
Je n'ai pas obtenu de code de retour quel que soit le cas, mais si les crédentiels sont les bons, le SMS est bien envoyé et reçu.
Je ne connais cette lib que depuis peu (merci a un membre du forum (djes)) et donc pas toutes les possibilités.
J'ai testé avec IE et Fiddler, et je n'obtiens pas de code de retour comme avec une page Web normale. Du coup, je me demande s'il est possible de savoir si le SMS a bien été envoyé.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Re: Webgadget et retour

Message par NY152 »

Désolé de ma réponse si tardive ^^

Perso, libcurl me génère des erreurs avec ton code-source

Image
.:NY152:.
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Webgadget et retour

Message par cage »

Bizarre, mais cela vient peut-être de la version de PB ou de l'OS

Ou alors d'une option de PB a cocher ou décocher.

J'utilise la version 5.60 de PB avec Windows 10 Creators x64 (voir ma signature)

Que j'utilise la version x86 ou x64 de PB, aucun problème.

Idem pour la compilation et les SMS sont bien envoyés/reçus via les exe générés.

Voici le fichier freemobilesms.pbp que j'utilise

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://www.purebasic.com/namespace" version="1.0" creator="PureBasic 5.60 (Windows - x64)">
  <section name="config">
    <options closefiles="0" openmode="1" name="freemobilesms Project (x64)"/>
  </section>
  <section name="data">
    <explorer view="..\..\Program Files\PureBasic\Examples\" pattern="0"/>
    <log show="1"/>
    <lastopen date="2017-04-25 16:21" user="admin" host="EBCAGE"/>
  </section>
  <section name="files">
    <file name="freemobilesms.pb">
      <config load="0" scan="1" panel="1" warn="1" lastopen="1" panelstate="+"/>
      <fingerprint md5="3a61afd6049679846d48a96fb9eba785"/>
    </file>
  </section>
  <section name="targets">
    <target name="Default Target" enabled="1" default="1">
      <inputfile value="freemobilesms.pb"/>
      <outputfile value="x64\freemobilesms.exe"/>
      <compiler version="PureBasic 5.60 (Windows - x64)"/>
      <executable value="x64\freemobilesms.exe"/>
      <options unicode="1" xpskin="1" debug="1"/>
      <purifier enable="1"/>
      <temporaryexe value="source"/>
      <versioninfo enable="1">
        <field0 value="17,04,0,29"/>
        <field1 value="17,04,0,29"/>
        <field2 value="CAGE"/>
        <field3 value="freemobilesms"/>
        <field4 value="17.04.29"/>
        <field5 value="17.04.29"/>
        <field6 value="freemobilesms - Send SMS"/>
        <field7 value="freemobilesms.exe"/>
        <field8 value="freemobilesms.exe"/>
        <field9 value="© CAGE"/>
        <field10 value="This software is the property of the author : CAGE"/>
        <field11 value="0"/>
        <field12 value="0"/>
      </versioninfo>
    </target>
    <target name="Default Target (x64)" enabled="1" default="0">
      <inputfile value="freemobilesms.pb"/>
      <outputfile value="freemobilesms.exe"/>
      <compiler version="PureBasic 5.60 (Windows - x64)"/>
      <executable value="freemobilesms.exe"/>
      <options unicode="1" xpskin="1" debug="1"/>
      <purifier enable="1"/>
      <temporaryexe value="source"/>
      <versioninfo enable="1">
        <field0 value="17,04,0,29"/>
        <field1 value="17,04,0,29"/>
        <field2 value="CAGE"/>
        <field3 value="freemobilesms"/>
        <field4 value="17.04.29"/>
        <field5 value="17.04.29"/>
        <field6 value="freemobilesms - Send SMS"/>
        <field7 value="freemobilesms.exe"/>
        <field8 value="freemobilesms.exe"/>
        <field9 value="© CAGE"/>
        <field10 value="This software is the property of the author : CAGE"/>
        <field11 value="0"/>
        <field12 value="0"/>
      </versioninfo>
    </target>
    <target name="Default Target (x86)" enabled="1" default="0">
      <inputfile value="freemobilesms.pb"/>
      <outputfile value="x86\freemobilesms.exe"/>
      <compiler version="PureBasic 5.60 (Windows - x86)"/>
      <executable value="x86\freemobilesms.exe"/>
      <options unicode="1" xpskin="1" debug="1"/>
      <purifier enable="1"/>
      <temporaryexe value="source"/>
      <versioninfo enable="1">
        <field0 value="17,04,0,29"/>
        <field1 value="17,04,0,29"/>
        <field2 value="CAGE"/>
        <field3 value="freemobilesms"/>
        <field4 value="17.04.29"/>
        <field5 value="17.04.29"/>
        <field6 value="freemobilesms - Send SMS"/>
        <field7 value="freemobilesms.exe"/>
        <field8 value="freemobilesms.exe"/>
        <field9 value="© CAGE"/>
        <field10 value="This software is the property of the author : CAGE"/>
        <field11 value="0"/>
        <field12 value="0"/>
      </versioninfo>
    </target>
  </section>
</project>
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Répondre