2012-07-20 32 views
0

如何讀取系統代理設置使用C或C++如何用c

+0

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-07-20 11:25:16

+0

'http_proxy'環境變量有正在使用的代理。 – m0skit0 2012-07-20 11:25:24

+0

我使用以下幾行來獲取代理設置: \t char * command =(char *)「gconftool-2 -R/system/http_proxy」; \t FILE * fpipe =(FILE *)popen(command,「r」); \t char line [256]; \t同時(與fgets(線,的sizeof(線),FPIPE)) \t { \t \t \t \t \t 的printf \t( 「%S」,線); \t} \t pclose(fpipe); – ragu 2012-07-23 12:54:53

回答

4

在linux值你正在尋找此功能getenv ("http_proxy")

+0

getenv(「http_proxy」)在ubuntu中返回null。有沒有其他的選擇。 – ragu 2012-07-22 09:55:13

+0

如果沒有任何env變量集匹配,getenv函數將返回NULL。因此,手動嘗試在shell上執行env命令並嘗試查找您正在討論的ubuntu系統是否設置了http_proxy – 2012-07-23 07:07:07

1

系統代理設置通常存儲在獲得的Linux系統代理設置環境變量,如HTTP_PROXY,HTTPS_PROXY等。

'C'允許我們通過向main()函數添加額外參數envp來讀取登記變量,如圖所示。

int main (int argc, char *argv[], char *envp[]) 
    { 
     char *http_proxy, *https_proxy; 
     http_proxy = getenv("HTTP_PROXY"); 
     https_proxy = getenv("HTTPS_PROXY"); 
     printf ("Proxy settings :: %s on %s.\n", http_proxy, https_proxy); 
     return 0; 
    } 

這應該做的伎倆取決於你想要處理的變量。

+1

這將最有可能地將'https_proxy'的值打印兩次,因爲'getenv()'可能會返回一個對靜態存儲器將被重用,因此在第二次調用時被覆蓋。 – alk 2012-07-20 11:53:53

+0

getenv(「HTTP_PROXY」);在ubuntu中返回null。 – ragu 2012-07-22 09:57:05

0

我見過的大多數Linux發行版都沒有「系統代理」的概念。在Linux(KDE,Gnome等)上運行的桌面環境通常具有配置選項來設置代理,爲該桌面編寫的大多數應用程序都可以訪問該代理,但是如何查看代碼將根據您正在運行的環境而有所不同。而且,運行例如Gnome下的KDE應用程序或反之亦然可能得不到相同的結果,除非兩者都已正確配置。由於這一點以及其他許多事情,許多單獨的應用程序都有自己的代理設置方法。其中一種可能的方式,適用於某些應用程序的是其他答案中提到的環境變量(其他可能性是各種配置文件,或連接到諸如gconf之類的配置服務之一)。如果你正在編寫一個新的應用程序,並希望能夠在該應用程序中設置和使用代理,那麼這種方法可能是最簡單的方法之一。