httpproxy généralisé pour toutes commandes ?

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

httpproxy généralisé pour toutes commandes ?

Message par caussatjerome »

Hello !
Il serait intéréssent de mettre en place une commande networkproxy("urlproxy") qui concernerait les commandes mails/ftp/http de manière plus générale à mon avis, qu'en penssez vous ?
de plus il n' y pas de commandes pou récupéré automatiquement le proxy InternetExplorer (j'ai bien créer quelques procédures, que je vous partage volontié) :

Code : Tout sélectionner

Procedure.s console_convert(ligne.s)
ligne.s=ReplaceString(ligne.s,"‚","é"):ligne.s=ReplaceString(ligne.s,"Š","è"):ligne.s=ReplaceString(ligne.s,"ÿ"," "):ligne.s=ReplaceString(ligne.s,"ˆ","ê"):ligne.s=ReplaceString(ligne.s,"‡","ç"):ligne.s=ReplaceString(ligne.s,"“","ô")
ProcedureReturn ligne.s
EndProcedure

Procedure.s get_reg_query(chemins.s,chaine.s)
Protected ligne.s,Compiler.l,sortie.s
Compiler = RunProgram("reg","query "+Chr(34)+chemins.s+Chr(34)+" /v "+chaine.s,"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide|#PB_Program_Ascii)
If Compiler
While ProgramRunning(Compiler)
ligne.s=ReadProgramString(Compiler)
If ligne.s
sortie.s+ligne.s+#CRLF$
EndIf
Wend
ProcedureReturn console_convert(sortie.s)
Else
ProcedureReturn "NOFIND"
EndIf
EndProcedure

Procedure.s get_ie_proxy()
Protected temp.s  
temp.s=get_reg_query("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyEnable");:Debug temp.s
If FindString(temp.s,"0x0"):proxyenable.l=0:Else:proxyenable.l=1:EndIf
temp.s=get_reg_query("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings","AutoConfigURL");:Debug temp.s
If FindString(temp.s,""):autoenable.l=0:Else:autoenable.l=1:EndIf
temp.s=get_reg_query("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyServer");:Debug temp.s
If FindString(temp.s,"REG_SZ"):proxyserver.s=StringField(temp.s,2,"REG_SZ    "):Else:proxyserver.s="":EndIf

sortie.s=Str(proxyenable)
sortie.s+Str(autoenable)
sortie.s+proxyserver.s
ProcedureReturn sortie.s
EndProcedure

Procedure.l test_proxy(proxy.s,urltest.s="https://www.google.fr/")
Protected *buffer,testsans.l,testavec.l,HttpRequest.l,retour.l
Debug proxy.s
HttpRequest = HTTPRequest(#PB_HTTP_Get, urltest.s)
If HttpRequest
  
  Debug "Réponse: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
testsans.l=Val(HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode))
If testsans.l=200:testsans.l=1:Else:testsans.l=0:EndIf
FinishHTTP(HTTPRequest)
Else
testsans.l=0
EndIf

HTTPProxy(proxy.s)
HttpRequest = HTTPRequest(#PB_HTTP_Get, urltest.s)
If HttpRequest
;Debug "Réponse: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
testavec.l=Val(HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode))
Select testavec.l
  Case 200:testavec.l=1
  Case 401,407,406,403,402,600:testavec.l=2;identify un bloquage proxy
  Default:testavec.l=0
EndSelect

FinishHTTP(HTTPRequest)
Else
testavec.l=0
EndIf
Select Str(testsans)+Str(testavec)
Case "10":retour.l=1;=accès sans proxy uniquement
Case "01":retour.l=2;=accès via proxy uniquement
Case "11":retour.l=3;=accès avec les deux
Case "00":retour.l=0;=pas d'accès avec ou sans proxy
Case "02":retour.l=-2;=le proxy bloque clairement l'url et l'accès directe ne fonctionne pas
Case "12":retour.l=-1;=le proxy bloque clairement l'url mais l'accès direct est ok
EndSelect
HTTPProxy("")
ProcedureReturn retour.l
EndProcedure

salutcava
Messages : 34
Inscription : lun. 10/juin/2013 12:01

Re: httpproxy généralisé pour toutes commandes ?

Message par salutcava »

Bonjour/Bonsoir,
J'ajoute ici un autre moyen de récupérer la config proxy du system pour l'utilisateur courant en utilisant une API windows :

Code : Tout sélectionner

Structure WINHTTP_CURRENT_USER_IE_PROXY_CONFIG
  fAutoDetect.i
  lpszAutoConfigUrl.s
  lpszProxy.s
  lpszProxyBypass.s
EndStructure

Prototype.i ProtoWinHttpGetIEProxyConfigForCurrentUser(*pProxyConfig)
If OpenLibrary(0, "Winhttp.dll")
  WinHttpGetIEProxyConfigForCurrentUser_.ProtoWinHttpGetIEProxyConfigForCurrentUser = GetFunction(0,"WinHttpGetIEProxyConfigForCurrentUser")
  ProxyConfig.WINHTTP_CURRENT_USER_IE_PROXY_CONFIG
  WinHttpGetIEProxyConfigForCurrentUser_(@ProxyConfig)
  If ProxyConfig\fAutoDetect
    Debug "Détection automatique activée"
  EndIf
  Debug "URL de configuration automatique : "+ProxyConfig\lpszAutoConfigUrl
  Debug "Serveur proxy : "+ProxyConfig\lpszProxy
  Debug "Bypass proxy pour : "+ProxyConfig\lpszProxyBypass
Else 
  Debug "Library NOK"
EndIf
Bonne journée/soirée!
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

Re: httpproxy généralisé pour toutes commandes ?

Message par caussatjerome »

Merci @salutcava code plus court et plus rapide !
Répondre