采納HTTPClient通過代理連接服務器
發(fā)表時間:2023-08-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]使用代理一般的辦法是用HTTPConnection的靜態(tài)方法setProxyServer實現(xiàn):HTTPConnection.setProxyServer("my.proxy.dom&quo...
使用代理一般的辦法是用HTTPConnection的靜態(tài)方法setProxyServer實現(xiàn):
HTTPConnection.setProxyServer("my.proxy.dom", 8008);
調(diào)用該方法以后產(chǎn)生的HTTPConnection對象都會通過該代理建立服務器連接。
特定某一個連接使用代理:
setCurrentProxy()
你也可以設(shè)置連接某些服務器不要采用代理:
HTTPConnection.dontProxyFor("localhost");
假如代理服務器要求用戶名密碼認證:
AuthorizationInfo.addDigestAuthorization(host, proxyPort, "", name, pass);
其中第三個參數(shù)是認證域,一般代理服務器可以設(shè)為空字符串,除非你知道服務器的確切域。
還有另外一個方法就是使用DefaultAuthHandler:
DefaultAuthHandler.setAuthorizationPrompter(new MyAuthPrompter(pa_name, pa_pass));
MyAuthPrompter是實現(xiàn)了AuthorizationPrompter接口的自定義類:
class MyAuthPrompter implements AuthorizationPrompter
{
private String pa_name, pa_pass;
private boolean been_here = false;
MyAuthPrompter(String pa_name, String pa_pass) {
this.pa_name = pa_name;
this.pa_pass = pa_pass;
}
public NVPair getUsernamePassword(AuthorizationInfo challenge, boolean forProxy) {
if (forProxy && pa_name != null){
if (been_here) {
System.out.println("Proxy authorization failed");
return null;
}
been_here = true;
return new NVPair(pa_name, pa_pass);
}
if (been_here) {
System.out.println("Proxy authorization succeeded");
}
// print out all challenge info
if (forProxy)
System.out.println("The proxy requires authorization");
else
System.out.println("The server requires authorization for this resource");
return null;
}
}
關(guān)于頁面認證
一個頁面是否需要認證,以及要求認證的信息可以通過HTTPClient/doc/GetAuthInfo.java來獲取:
java GetAuthInfo http://some.host.dom/the/file.html
程序會輸出認證信息包括認證域。
附注:
下載要求用戶認證的頁面時,HTTPClient會彈出用戶名密碼以及作用域輸入框。假如需要取消輸入彈出對話框的話,可以調(diào)用HTTPConnection的setAllowUserInteraction(false)方法。