2010-03-26 13 views
0

Je travaille sur un code existant où une application utilise AxSHDocVw.AxWebBrowser (et nonSystem.Windows.Forms.Control) pour ouvrir des pages Web et l'étendre pour prendre en compte les considérations de proxy.Définir les informations d'identification du proxy dans le contrôle du navigateur Web

Je ai l'exemple suivant sur http://www.pinvoke.net/default.aspx/wininet/internetsetoption.html pour utiliser InternetSetOption() pour passer par proxy spécifié et testé que cela fonctionne.

Maintenant, l'obstacle est que j'ai tout essayé mais a échoué à passer le nom d'utilisateur et mot de passe avec le code suivant:

//-- Set Proxy Username 
bool resultF = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_USERNAME, username, username.Length+1); 
var errorF = Marshal.GetLastWin32Error(); 

//-- Set Proxy Password 
bool resultG = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_PASSWORD, password, password.Length+1); 
var errorG = Marshal.GetLastWin32Error(); 

Les deux resultF et resultG retour true et n'a pas d'erreurs, mais il travaille toujours. Un indice sur ce qui peut se passer ici? et quelle méthode dois-je déboguer?

Merci d'avance.

+0

possible double http: // stackoverflow .com/questions/2499568/how-to-set-a-proxy-for-webbrowser-control-sans-effecting-the-system-ie-proxy/2504683 # 2504683 –

+0

Cela semble avoir fonctionné, mais si c'est Non, vous devez probablement implémenter un rappel IHTTPNegotiate et y ajouter votre code. – EricLaw

Répondre

1

En fait, je trouve une solution work'able, où il était se trouvent sous navigation avec Proxy-authentification en-tête:

var credentialStringValue = "user:pass"; 
var credentialByteArray = ASCIIEncoding.ASCII.GetBytes(credentialStringValue); 
var credentialBase64String = Convert.ToBase64String(credentialByteArray); 

Object nullObject = 0; 
Object nullObjectString = ""; 
Object authObject = string.Format("Proxy-Authorization: Basic {0}{1}", credentialBase64String, Environment.NewLine); 

browser.Navigate(args.Url, ref nullObject, ref nullObject, ref nullObjectString, ref authObject); 

browser est:

public AxWebBrowser browser; 
+0

Par curiosité, cela cache-t-il les informations de proxy pour toutes les demandes futures via l'objet webbrowser? Par exemple, si un utilisateur clique sur un lien dans la page affichée dans le contrôle du navigateur, ce canal de communication se produit-il également sur le proxy? –

+0

Non, cela ne fonctionnerait pas, à moins que la connexion ne soit réutilisée. – EricLaw