Page 1 sur 2

[OK]Utilisation de HTTPProxy() ???

Publié : lun. 13/mars/2017 16:27
par cage
Bonjour a tous,
Ayant migré vers la version 5.60 de PB, j'ai voulu mettre à jour quelques applications.
Ces applications sont utilisées en entreprise derrière un Proxy.
Elles offrent la possibilité de vérifier s'il existe une mise à jour disponible sur internet.
J'ai demandé a un ami en entreprise de tester et cela ne fonctionne pas (du moins comme je le pensais).
Normalement, on devrait obtenir le message d'authentification du Proxy, ce qui n'est pas le cas.
Il y a-t-il une possibilité de déclarer HTTPProxy() pour qu'il utilise le proxy du système (cas en entreprise)
Merci pour vos retours d’expérience.
Gérard

Code : Tout sélectionner

EnableExplicit

Define header$, result$, retval, Message$
Define page$  = "index.php"
Define URL$   = "http://www.purebasic.com/"+page$
Define proxy  = #True
Define proxy$ = "127.0.0.1:8118"

Message$ = "Utilisation forcée du Proxy ?"
retval = MessageRequester("HTTPProxy()",Message$,#PB_MessageRequester_YesNo)
Select retval
  Case #PB_MessageRequester_Yes : proxy = #True
  Case #PB_MessageRequester_No  : proxy = #False
  Default : End
EndSelect

If InitNetwork()
  If proxy
    Debug "tester si le proxy est déclaré ?"+#CRLF$
    If proxy$ <> #Null$
      Debug "télécharger la page avec proxy"+#CRLF$
      HTTPProxy("http://"+proxy$)
      header$ = GetHTTPHeader(URL$)
      result$ = StringField(header$, 1, #LF$) : Debug result$
      If FindString(result$, "200 OK",1,#PB_String_NoCase)
        retval = ReceiveHTTPFile(URL$, page$, #PB_HTTP_NoRedirect)
        If retval : Debug "téléchargement avec proxy est OK" : EndIf
      EndIf
    Else
      Debug "pas de proxy déclaré"
    EndIf
  Else
    Debug "télécharger la page sans proxy" + #CRLF$
    header$ = GetHTTPHeader(URL$)
    result$ = StringField(header$, 1, #LF$) : Debug result$
    If FindString(result$, "200 OK",1,#PB_String_NoCase)
      retval = ReceiveHTTPFile(URL$, page$, #PB_HTTP_NoRedirect)
      If retval : Debug "téléchargement sans proxy est OK" : EndIf
    EndIf
  EndIf
EndIf

Re: Utilsation de HTTPProxy() ???

Publié : lun. 13/mars/2017 16:36
par Marc56
Les proxy authentifiés d'entreprises sont en général configurés pour ne demander l'authentification qu'une seule fois par session (ou après un bail de 24H)
As-tu bien demandé à ton utilisateur de fermer sa session réseau au préalable ? (pas uniquement verrouiller la session mais se déconnecter)

Re: Utilsation de HTTPProxy() ???

Publié : lun. 13/mars/2017 19:09
par cage
Dans mon ancienne entreprise, la demande d'authentification est pratiquement systématique.
Tant que l'application qui a obtenu l'identification est active, l'accès a internet se fait sans ré-identification.
Si on ferme l'application et qu'on la relance, il faut s'authentifier de nouveau.
Idem pour les navigateurs, il suffit de vider l'historique pour relancer la demande d'authentification.
Étant a la retraite, je n'ai plus trop les moyens de tester depuis l'intérieur de l'entreprise.
C'est pour cela que je demandais si certains avaient un retour en entreprise.

Re: Utilsation de HTTPProxy() ???

Publié : lun. 13/mars/2017 20:47
par cage
Je pense qu'il y a un blême avec l'utilisation de HTTPProxy()
J'ai installé CCProxy sur mon PC
J'ai activé CCProxy sur l'adresse IP 192.168.0.10 port 808 en standard
J'ai validé Autoriser seulement: Utilisateur/Mot de passe (admin/1234)
Si je documente cette adresse/port dans Firefox, voici ce que j'obtiens:
Image
Ce qui me parait tout a fait normal
Si j"exécute ce bout de code

Code : Tout sélectionner

InitNetwork()
HTTPProxy("http://192.168.0.10:808")
header$ = GetHTTPHeader("http://www.purebasic.com/index.php")
Debug header$
J'obtiens ceci:

Code : Tout sélectionner

HTTP/1.1 407 Proxy Authentication Required
Server: Proxy
Proxy-Authenticate: Basic realm="CCProxy Authorization"
Connection: Close
Proxy-Connection: Close
Content-Length: 263
Mais rien de plus. Pourquoi une boite de dialogue ne s'affiche pas pour documenter User$/Password$
Si j'exécute ce bout de code

Code : Tout sélectionner

InitNetwork()
HTTPProxy("http://192.168.0.10:808","admin","1234")
header$ = GetHTTPHeader("http://www.purebasic.com/index.php")
Debug header$
J'obtiens ceci:

Code : Tout sélectionner

HTTP/1.1 200 OK
Date: Mon, 13 Mar 2017 19:30:43 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.45-0+deb7u7
Vary: Accept-Encoding
Content-Type: text/html
Je passe bien a travers le Proxy et tout est normal.
La documentation de PB n'est pas claire du tout.
Syntax

HTTPProxy(URL$ [, User$, Password$])
Description

Specify a proxy to use for the following HTTP commands: GetHTTPHeader(), ReceiveHTTPFile() and ReceiveHTTPMemory().
User$ et Password$ ne sont donc pas optionnels dans PB
Il faut qu'ils soient documentés quelque part dans le programme ou il faut ouvrir une boite de dialogue pour les documenter.
Qu'en pensez vous. Avez vous réussi a utiliser HTTPProxy() correctement.
Merci de vos retours.
Gérard

Re: Utilsation de HTTPProxy() ???

Publié : lun. 13/mars/2017 21:37
par Marc56
Je pense que la boîte de demande d'authentification est générée par le navigateur et non pas pas l'os hôte ou serveur
Je ne sais pas si le composant du Webgadget contient cet élément ?

Donc tu dois en faire une dans ton application.

Si header retourne 407
Ouvrir boîte
Relancer commande httpproxy avec nom d'utilisateur et mdp.

Re: Utilsation de HTTPProxy() ???

Publié : lun. 13/mars/2017 23:14
par cage
Jusqu'à présent, j'utilisais le gadget WebGadget() qui lui affiche une fenêtre pour s'authentifier auprès du proxy.
Mais la mise en place n'est pas des plus aisée.
Cette nouvelle commande simplifie les chose a l’extrême.
Au final, voici comment je m'en sort. Toujours avec mon proxy local (CCProxy)
Ma vraie application devrait-être testée demain en entreprise.

Code : Tout sélectionner

EnableExplicit

Define header$, result$, retval, Message$
Define page$  = "index.php"
Define URL$   = "http://www.purebasic.com/"+page$
Define proxy  = #True
Define proxy$ = "192.168.0.10:808" ; http://www.youngzsoft.net/ccproxy/
Define user$  = GetEnvironmentVariable("Username") ; login normalisé identique sur PC et Proxy
Define password$

Message$ = "Utilisation forcée du proxy "+proxy$+" ?"
retval = MessageRequester("HTTPProxy()",Message$,#PB_MessageRequester_YesNoCancel)
Select retval
  Case #PB_MessageRequester_Yes : proxy = #True
  Case #PB_MessageRequester_No  : proxy = #False
  Default : End
EndSelect

If InitNetwork()
  If proxy
    Debug "Tester si le proxy est déclaré ?"+#CRLF$
    If proxy$ <> #Null$
      Debug "Télécharger la page avec proxy"+#CRLF$
      password$ = InputRequester("Test du proxy", "Entrez le mot de passe pour " + user$, #Null$, #PB_InputRequester_Password)
      If password$ = #Null$ : End : EndIf
      InitNetwork()
      HTTPProxy("http://"+proxy$, user$, password$)
      header$ = GetHTTPHeader(URL$) : Debug header$
      result$ = StringField(header$, 1, #LF$)
      If FindString(result$, "200 OK",1,#PB_String_NoCase)
        retval = ReceiveHTTPFile(URL$, page$, #PB_HTTP_NoRedirect)
        If retval : Debug "Téléchargement avec proxy OK" : EndIf
      EndIf
      password$ = #Null$
    Else
      Debug "Pas de proxy déclaré"
    EndIf
  Else
    Debug "Télécharger la page sans proxy" + #CRLF$
    header$ = GetHTTPHeader(URL$)
    result$ = StringField(header$, 1, #LF$) : Debug result$
    If FindString(result$, "200 OK",1,#PB_String_NoCase)
      retval = ReceiveHTTPFile(URL$, page$, #PB_HTTP_NoRedirect)
      If retval : Debug "Téléchargement sans proxy OK" : EndIf
    EndIf
  EndIf
EndIf
Gérard

Re: Utilsation de HTTPProxy() ???

Publié : mar. 14/mars/2017 9:30
par Marc56
Très bien ccproxy, je ne connaissais pas :)

Une alternative (testée avec ccproxy)
Je cherche simplement le "407 Unauthorized" dans l'entête pour activer ou pas l'authentification

Code : Tout sélectionner

InitNetwork()

URL$        = "http://www.purebasic.com"
Local_File$ = GetTemporaryDirectory() + "purebasic.htm"
Proxy_User$ = "User-001"
Proxy_Pass$ = "123456"

HTTPProxy("127.0.0.1:808")

If FindString(GetHTTPHeader(URL$), "407 Unauthorized")
     Debug ">> Proxy authentifié présent, utilisation user/mdp"
     HTTPProxy("127.0.0.1:808", Proxy_User$, Proxy_Pass$)
     
     If FindString(GetHTTPHeader(URL$), "200 OK")
          Debug ">> Authentification Proxy OK, Page accessible"
          If ReceiveHTTPFile(URL$, Local_File$)
               Debug ">> Page chargée avec succès"
               RunProgram(Local_File$)
          EndIf
     EndIf
EndIf
Version avec un peu plus d'info (et qui teste "407 Unauthorized" et "Proxy")

Code : Tout sélectionner

InitNetwork()

URL$        = "http://www.purebasic.com"
Local_File$ = GetTemporaryDirectory() + "purebasic.htm"
Proxy_User$ = "User-001"
Proxy_Pass$ = "123456"

HTTPProxy("127.0.0.1:808")

Header$ = GetHTTPHeader(URL$)

If FindString(Header$, "407 Unauthorized") And FindString(Header$, "Proxy")
     Debug ">> Proxy authentifié présent, utilisation user/mdp"
     Debug "--- HEADER --- " + #CRLF$ + GetHTTPHeader(URL$) + "---HEADER ---"
     HTTPProxy("127.0.0.1:808", Proxy_User$, Proxy_Pass$)
     
     If FindString(GetHTTPHeader(URL$), "200 OK")
          Debug ">> Authentification Proxy OK, Page accessible"
          If ReceiveHTTPFile(URL$, Local_File$)
               Debug ">> Page chargée avec succès"
               RunProgram(Local_File$)
          EndIf
     EndIf
EndIf
KCC nous dira peut-être si ça marche ou pas sur son réseau :?:

Re: Utilsation de HTTPProxy() ???

Publié : mar. 14/mars/2017 10:20
par Kwai chang caine
Oui justement, j'avais hate de quitter l'extraterrestre pour faire un essai sur windows

Alors déjà, chez nous, c'est encore un autre comportement que ceux que vous avez décrit
C'est un espece de bail, on a le panneau de merde, on entre login/mdp et apres on a X minutes pour aller jouer dans la plus grande cour de récrée of the world :mrgreen:
J'ai un peu la sensation que plus on s'en sert plus le temps est long, sans quand même dépasser un max
Par contre si il dort dans son coin, il me semble que le panneau revient plus vite

On peut donc refermer le navigateur, le bail est intact pendant ce laps de temps imparti
Par contre si j'ai ouvert avec IE, il faut que le réouvre avec FF, donc les autorisations sont données à chaque giciel, et pendant une durée

Et moi j'ai beau essayer de tout effacer, impossible de clore le bail par anticipation
J'ai toujours cherché des codes pour le faire et quedal, et pourtant ce genre de chose devrait être conseillé par les administrateurs, et en 10 ans, j'ai jamais rien vu qui permettait de se déconnecter de ce bail, si "quinquin" a une idée, au passage
Peut être une entete à envoyer au serveur, genre

Code : Tout sélectionner

HTTP/1.1 407 Proxy Authentication CasseToi
Server: Proxy
Proxy-Authenticate: Basic realm="CCProxy LacheMoiLaGrappe"
Connection: Close (Already say)
Proxy-Connection: Close (Say two time "Bourrin")
Content-Length: 263
Et il y a plusieurs autorisations, style une pour le ftp, une le http, car même une fois l'autorisation donnée, il arrive que le navigateur redemande une seconde authentification quelques secondes apres selon le lien que l'on clique 8O
Heureusement, ca dépasse jamais 2, un des administrateurs réseau m'avait dit que c'était selon le protocole utilisé ou un truc du genre

Voila tout ça pour dire qu'ici c'est pas facile de tester, car on est jamais sur qu'on a pu sortir parce que la porte est grande ouverte, ou parce que on a les clefs :|
Et à chaque fois faut, attendre cette fin de bail.....et putain ce qu'elle est courte quant on navigue...et ce qu'elle est longue quand on attend pour tester un code :twisted:
Un peu comme la compagnie d'une belle fille et d'une moche pendant le même temps.....une autre maniere d'expliquer les travaux d'einstein quoi :mrgreen:

J'essaierais de faire des tests des que j'aurais un peu de temps de libre, car c'est un sujet tres intéréssant :wink:
Dommage, certains des cadors du réseau du forum FR ne passent plus par ici, on aurait bien eu besoin d'eux, en ce moment avec cette nouvelle fonction :|

Re: Utilsation de HTTPProxy() ???

Publié : mar. 14/mars/2017 11:34
par cage
Bonjour,
Une bonne nouvelle, cela fonctionne parfaitement en entreprise derrière un proxy.
Rien de plus simple a mettre en œuvre en fait une fois qu'on a compris.
Je passe tous les détails et vérifications, voila la synthèse:

Code : Tout sélectionner

EnableExplicit
Define URL$="http://www.purebasic.com/index.php"
Define proxy$ = "192.168.0.10:808" ; http://www.youngzsoft.net/ccproxy/
Define user$="admin"
Define password$="1234"
Define header$, result$, retval
InitNetwork()
HTTPProxy("http://"+proxy$,user$,password$)
header$ = GetHTTPHeader(URL$)
result$ = StringField(header$, 1, #LF$)
If FindString(result$, "200 OK",1,#PB_String_NoCase)
  retval = ReceiveHTTPFile(URL$, "index.php", #PB_HTTP_NoRedirect)
EndIf
En local, je fais mes tests avec CCProxy avec admin/1234 comme login/password
Je me suis laissé tromper par la documentation qui présente User$ et Password$ comme optionnels.
Gérard

Re: Utilsation de HTTPProxy() ???

Publié : mar. 14/mars/2017 11:58
par Marc56
cage a écrit :Je me suis laissé tromper par la documentation qui présente User$ et Password$ comme optionnels.
Ces paramètres sont bien optionnels, puisque quand on utilise par exemple un proxy anti-pub, on n'a pas besoin de login/mdp

Quant à la fenêtre de login qui apparait dans le cas d'un proxy authentifié, elle est générée par l'application appelante et non pas par le proxy ou par le système.
La preuve, elle est différente si on se connecte depuis FF, IE ou n’importe quel autre navigateur ou logiciel sachant utiliser un proxy.

Re: Utilsation de HTTPProxy() ???

Publié : mar. 14/mars/2017 12:17
par cage
Tout a fait d'accord, mais je m'attendais a ce que PB ouvre une fenêtre équivalente pour s'authentifier.
Cela aurait été un must.
La doc aurait pu indiquer que User$ et Password$ étaient obligatoires, mais que si non utilisés, les documenter a vide (#Null$)
Mais je reconnais que je me suis laissé emporter par l'idée que je m'en faisais.
Pour moi, une bonne documentation ne doit pas laisser de doute.
Autrement c'est une perte de temps a essayer de comprendre, car on ne comprends pas tous de la même manière, ce qui est déjà arrivé plusieurs fois sur ce forum.
Mais bon, la fonction HTTPProxy() fonctionne bien, ce qui est le principal.
Gérard

Re: Utilsation de HTTPProxy() ???

Publié : mar. 14/mars/2017 12:56
par Marc56
Cela obligeait à taper du code inutile et à devoir se souvenir ou consulter la doc pour savoir si les paramètres "vides" sont des chaines, de valeurs numériques, des adresses, des pointeurs etc
Dans la philosophie de PB tous les paramètres optionnels d'une fonction peuvent êtres omis c'est bien plus rapide et lisible. Plus rapide aussi pour le compilateur (moins de valeurs à vérifier)

C'est grâce aussi à ces paramètres optionnels qu'on peut ouvrir une fenêtre avec seulement 6 paramètres plutôt que les 12 de l'API correspondante.

Pour la fenêtre, programmer la fonction pour ouvrir une boîte de dialogue serait un plus mais c'est du code à gérer en plus pour le système.
La qualité de PB vient aussi du fait que Fred fait très attention au rapport poids (taille de l'EXE) / puissance (vitesse de compilation) lors de l'ajout de nouvelles fonctionnalités.

Par contre un nouveau Message Requester avec deux champs login/password (hidden) ce serait bien. :idea: Je propose LoginRequester(). (Oui on peut le faire soi-même dirons certains, mais ça fait souvent partie des dialogues standards de la plupart des langages)

:wink:

Re: [OK]Utilisation de HTTPProxy() ???

Publié : jeu. 16/mars/2017 11:43
par Kwai chang caine
Une bonne nouvelle, cela fonctionne parfaitement en entreprise derrière un proxy.
Bon...ça a été long, mais tester le proxy chez nous c'est "javel lacroix " et la banniere :oops:
En fait faut noir d'essais, car on a des proxy qui apparement se relaient, donc faut essayer avec l'un et l'autre, faut attendre cette histoire de bail que je vous ai raconté, bref...à chaque coup que je doit tester une routine pour traverser le proxy, je sais par avance que je vais passer une mauvaise journée. :|

Alors moi, je serais plus nuancé.
En fait ça ne marche pas vraiment, je sais pas comment est foutu le "bouzin", mais "HTTPProxy()" ne marche pas completement ici
Je n'arrive pas à traverser le PROXY en informant le Login/Mdp :|

Mais si je me connecte à la mano dans le panneau d'authentification, aprés ça passe...
Alors me direz vous, plus besoin de "HTTPProxy()" ??
Et ben figuré vous que si..si je l'enleve ça passe pas de nouveau, même connecté au bail 8O

Donc j'ai comme la sensation d'une double vérification
Il faut que je sois connecté à ce bail, et ensuite que je continue à utiliser HTTPProxy() :cry:

Depuis 10 ans sur les forums PB, j'ai encore trouvé aucun code qui passe directement en envoyant le Login/Mdp au proxy :|
Par contre certains codes ont donc bien besoin de la connection mano....mais une fois le bail créé, je n'ai plus besoin de m'authentifier.

Donc pour l'instant, ici, la fonction de FRED marche encore moins bien que les codes trouvé sur le forum, j'suis fatigué de ne jamais être comme les autres :cry:

Re: [OK]Utilisation de HTTPProxy() ???

Publié : jeu. 16/mars/2017 13:00
par Kwai chang caine
Bon apres un nouvel essais, quand je commence impossible d'envoyer mon authentification au serveur
Je l'entre donc à la main, et apres le code marche, mais en fait plus besoin d'entrer le MDP
En fait HTTPProxy() sert quand même à quelque chose, car si je le commente, ça marche plus 8O
Bref ... essai pas vraiment concluant ici :|

Code : Tout sélectionner

EnableExplicit

Define header$, result$, retval, Message$
Define page$  = "index.php"
Define URL$   = "http://www.purebasic.com/"+page$
Define proxy  = #True
Define proxy$ = "noevipncp2n.edf.fr:3128" ; http://www.youngzsoft.net/ccproxy/
Define user$  = GetEnvironmentVariable("Username") ; login normalisé identique sur PC et Proxy
Define password$

Message$ = "Utilisation forcée du proxy "+proxy$+" ?"
retval = MessageRequester("HTTPProxy()",Message$,#PB_MessageRequester_YesNoCancel)
Select retval
  Case #PB_MessageRequester_Yes : proxy = #True
  Case #PB_MessageRequester_No  : proxy = #False
  Default : End
EndSelect

If InitNetwork()
  If proxy
    Debug "Tester si le proxy est déclaré ?"+#CRLF$
    If proxy$ <> #Null$
      Debug "Télécharger la page avec proxy"+#CRLF$
      password$ = InputRequester("Test du proxy", "Entrez le mot de passe pour " + user$, #Null$, #PB_InputRequester_Password)
      If password$ = #Null$ : End : EndIf
      InitNetwork()
      HTTPProxy("http://"+proxy$, user$, password$)
      header$ = GetHTTPHeader(URL$) : Debug header$
      result$ = StringField(header$, 1, #LF$)
      If FindString(result$, "200 OK",1,#PB_String_NoCase)
        retval = ReceiveHTTPFile(URL$, page$, #PB_HTTP_NoRedirect)
        If retval : Debug "Téléchargement avec proxy OK" : EndIf
      EndIf
      password$ = #Null$
    Else
      Debug "Pas de proxy déclaré"
    EndIf
  Else
    Debug "Télécharger la page sans proxy" + #CRLF$
    header$ = GetHTTPHeader(URL$)
    result$ = StringField(header$, 1, #LF$) : Debug result$
    If FindString(result$, "200 OK",1,#PB_String_NoCase)
      retval = ReceiveHTTPFile(URL$, page$, #PB_HTTP_NoRedirect)
      If retval : Debug "Téléchargement sans proxy OK" : EndIf
    EndIf
  EndIf
EndIf

Re: [OK]Utilisation de HTTPProxy() ???

Publié : jeu. 16/mars/2017 13:25
par Marc56

Code : Tout sélectionner

Define user$  = GetEnvironmentVariable("Username") ; login normalisé identique sur PC et Proxy
Cet exemple suppose que le username de proxy soit le même que le username de session windows.