كيفية الاستعلام وقم بتعيين إعدادات الوكيل ضمن Internet Explorer برمجياً

ملخص

توضح هذه المقالة الخطوات اللازمة لتعيين معلومات إعداد الوكيل ل Internet Explorer والاستعلام برمجياً.

ضمن Internet Explorer 4.x والإصدارات السابقة له، تستخدم InternetSetOption و APIs إينتيرنيتقويريوبشن علامة INTERNET_OPTION_PROXY. بينما تزال تعمل هذا الخيار ضمن Internet Explorer 5، أدخلت خيارات اتصال متعددة في الإصدار الجديد. ونظرا لذلك، سيعود علامة INTERNET_OPTION_PROXY إعداد الملقم الوكيل "ثابت" فقط. الخيار ثابتة يتم تخزينها بالطريقة نفسها كان ضمن Internet Explorer 4.0 ضمن الخلية HKEY_CURRENT_USER معلومات الملقم الوكيل

ملاحظة: INTERNET_OPTION_PROXY لا يغير الإعدادات. وذلك للعملية الحالية فقط عند استخدام مؤشر NULL. ومع ذلك، فإنه أيضا تغيير الإعدادات على أساس لكل جلسة إذا تم إرسال مؤشر جلسة صالحة في (جلسة مقابض يتم الحصول عليها باستخدام InternetOpen() API).


إذا كان إطار Internet Explorer 5 أو تحديد خيار اتصال مختلفة (مثل اتصال الطلب الهاتفي) كالافتراضي، من الممكن الحصول على INTERNET_OPTION_PROXY استخدام معلومات الوكيل وضع علامة قد تكون غير صحيحة Internet Explorer لجلسة العمل الحالية. لهذا السبب، ضمن Internet Explorer 5، من المستحسن استخدام INTERNET_OPTION_PER_CONNECTION_OPTION يمكن بدلاً من ذلك.

ملاحظة: يؤدي INTERNET_OPTION_PER_CONNECTION_OPTION إعدادات تغيير على أساس مستوى النظام عند استخدام مؤشر NULL. لإظهار إعدادات الوكيل العام بشكل صحيح، يجب استدعاء الدالة InternetSetOption علامة الخيار INTERNET_OPTION_REFRESH. أو، لتعيين الإعدادات على أساس كل جلسة، يمكن استخدام مؤشر جلسة صالحة.


ملاحظة: لا يزال بالإمكان تغيير معلومات الوكيل لعملية whgke دون التأثير على إعدادات الجهاز العالمي في Internet Explorer 5 والإصدارات الأحدث. للقيام بذلك، يجب استدعاء الدالة InternetSetOption على مؤشر يتم إرجاعها بواسطة الدالة إينتيرنيتوبين باستخدام الخيار INTERNET_OPTION_PER_CONNECTION_OPTION. مثال التعليمات البرمجية التالي تغيير الوكيل للعملية بالكامل على الرغم من إغلاق مؤشر هينتيرنيت ولا تستخدم للطلب الفعلي.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...); 
InternetCloseHandle (hInternet);

مزيد من المعلومات

ضمن Internet Explorer 4.x، إليه نموذجية للاستعلام معلومات الوكيل تبدو إلى حد ما كما يلي:
unsigned long        nSize = 4096;char                 szBuf[4096] = { 0 };
INTERNET_PROXY_INFO* pInfo = (INTERNET_PROXY_INFO*)szBuf;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PROXY, pInfo, &nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());

ضمن Internet Explorer 5، الطريقة الموصى بها لاستخدام تعليمات برمجية مشابهة لأسفل:

INTERNET_PER_CONN_OPTION_LIST    List;INTERNET_PER_CONN_OPTION         Option[5];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
Option[2].dwOption = INTERNET_PER_CONN_FLAGS;
Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 5;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());
if(Option[0].Value.pszValue != NULL)
printf("%s\n", Option[0].Value.pszValue);

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_PROXY_URL) == PROXY_TYPE_AUTO_PROXY_URL)
printf("PROXY_TYPE_AUTO_PROXY_URL\n");

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_DETECT) == PROXY_TYPE_AUTO_DETECT)
printf("PROXY_TYPE_AUTO_DETECT\n");

INTERNET_VERSION_INFO Version;
nSize = sizeof(INTERNET_VERSION_INFO);

InternetQueryOption(NULL, INTERNET_OPTION_VERSION, &Version, &nSize);

if(Option[0].Value.pszValue != NULL)
GlobalFree(Option[0].Value.pszValue);

if(Option[3].Value.pszValue != NULL)
GlobalFree(Option[3].Value.pszValue);

if(Option[4].Value.pszValue != NULL)
GlobalFree(Option[4].Value.pszValue);

تحديد التعليمات البرمجية أعلاه الاتصال عن طريق تعيين سلسلة بسزكونيكشن في بنية INTERNET_PER_CONN_OPTION_LIST. عن طريق تعيين هذه السلسلة إلى فارغة، سيتم استرداد معلومات التكوين الافتراضي (أو LAN) الإعدادات.

الخيار الأول (الخيار INTERNET_PER_CONN_AUTOCONFIG_URL [0]) بإرجاع محدد موقع المعلومات المحدد للتكوين التلقائي للخادم الوكيل. الخيار الثاني (الخيار INTERNET_PER_CONN_AUTODISCOVERY_FLAG [1]) سيكشف ما إذا كان الكشف التلقائي عن تمكين الخيار أم لا للاتصال المحدد. يحدد الخيار الثالث تركيبة العلامات التي تم تعيينها لهذا الاتصال معينة. الخياران الأخيران تتوافق مع المعلومات نفسها كما استخدمت عرج المستردة INTERNET_OPTION_PROXY في Internet Explorer 4.x.

كما ترى أيضا، يتم تحرير الخيارات التي قد تكون يمكن إرجاع قيم السلسلة باستخدام GlobalFree(). وهذا لأنه يتم تخصيصها لك المخازن المؤقتة سلسلة من قبل مكتبة WININET، والأمر متروك للمبرمج لإخلاء المخزن المؤقت بعد استخدامه.

للحصول على معلومات اتصال آخر، مهتم ببساطة تغيير حالة سلسلة List.pszConnection للإشارة إلى إدخال إعدادات الطلب الهاتفي.

وبالمثل، لتعيين معلومات وكيل، يجب استخدام نفس التقنية ولكن مع InternetSetOption() بدلاً من ذلك، على سبيل المثال:
INTERNET_PER_CONN_OPTION_LIST    List;INTERNET_PER_CONN_OPTION         Option[1];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[0].Value.pszValue = "http://myproxy:8080";

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());


مرة أخرى، سيتم تغيير النموذج أعلاه الافتراضي (أو LAN) الإعدادات (List.pszConnection = = فارغة). في النموذج، يتم تغيير معلومات الملقم الوكيل "الثابتة" إلى "http://myproxy" في المنفذ 8080. كما يمكنك أيضا تغيير URL التكوين التلقائي:
INTERNET_PER_CONN_OPTION_LIST    List;INTERNET_PER_CONN_OPTION         Option[2];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[0].Value.pszValue = "http://myserver/get_proxy_info.dll";
Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[1].Value.dwValue = PROXY_TYPE_AUTO_PROXY_URL;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 2;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());

عند تكوين Internet Explorer لاستخدام ملقم وكيل ل HTTP والانتقال مباشرة للبروتوكولات الأخرى، استخدم التعليمات البرمجية لمتابعة.

ملاحظة: المخزن المؤقت الذي تم تمريره إلى INTERNET_PER_CONN_PROXY_SERVER على إعدادات لكل بروتوكول (تعين التعليمات البرمجية هذه فقط HTTP، واستخدام البروتوكولات الأخرى الاتصال المباشر).

ملاحظة: INTERNET_PER_CONN_FLAGS تعيين القيمة لكلا النوعين من الوكيل (مباشرة أو من خلال الوكيل) في أحد عناصر "الصفيف القائمة الخيار"، كما هو موضح أدناه في التعليمات البرمجية.

ملاحظة: يجب عليك أو هذه الإشارات في مكان واحد. إذا قمت بوضع هذه العلامات في آخر عنصر في القائمة، سيتم عرض بشكل صحيح (خيارات مستكشف إنترنت)، ولكن أحد العلامات (الأولى التي تم تعيينها) سوف تعمل.

int main(int argc, char * argv[]) { 
char buff[256] = "http=http://<ProxyServerName>:80";
// To include server for FTP, HTTPS, and so on, use the string
// (ftp=http://<ProxyServerName>:80; https=https://<ProxyServerName>:80)
INTERNET_PER_CONN_OPTION_LIST List;
INTERNET_PER_CONN_OPTION Option[3];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[0].Value.pszValue = buff;

Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[1].Value.dwValue = PROXY_TYPE_PROXY;
Option[1].Value.dwValue |= PROXY_TYPE_DIRECT;
// This option sets all the possible connection types for the client.
// This case specifies that the proxy can be used or direct connection is possible.

Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[2].Value.pszValue = "<local>";



List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 3;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
printf("InternetSetOption failed! (%d)\n", GetLastError());

InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL);
//The connection settings for other instances of Internet Explorer.

return 0;

}

في النموذج أعلاه (الافتراضي مرة أخرى أو إعداد شبكة الاتصال المحلية)، يجب عليك تحديد URL التكوين الوكيل التلقائي وتعيين الخيار "إشارة إلى" تمكين تكوين الوكيل التلقائي.

المراجع

وثائق MSDN WinInet API، نيسان/أبريل 1999
خصائص

رقم الموضوع: 226473 - آخر مراجعة: 08‏/01‏/2017 - المراجعة: 1

تعليقات