采納HTTPClient通過(guò)代理連接服務(wù)器
發(fā)表時(shí)間:2023-08-18 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]使用代理一般的辦法是用HTTPConnection的靜態(tài)方法setProxyServer實(shí)現(xiàn):HTTPConnection.setProxyServer("my.proxy.dom&quo...
使用代理一般的辦法是用HTTPConnection的靜態(tài)方法setProxyServer實(shí)現(xiàn):
HTTPConnection.setProxyServer("my.proxy.dom", 8008);
調(diào)用該方法以后產(chǎn)生的HTTPConnection對(duì)象都會(huì)通過(guò)該代理建立服務(wù)器連接。
特定某一個(gè)連接使用代理:
setCurrentProxy()
你也可以設(shè)置連接某些服務(wù)器不要采用代理:
HTTPConnection.dontProxyFor("localhost");
假如代理服務(wù)器要求用戶(hù)名密碼認(rèn)證:
AuthorizationInfo.addDigestAuthorization(host, proxyPort, "", name, pass);
其中第三個(gè)參數(shù)是認(rèn)證域,一般代理服務(wù)器可以設(shè)為空字符串,除非你知道服務(wù)器的確切域。
還有另外一個(gè)方法就是使用DefaultAuthHandler:
DefaultAuthHandler.setAuthorizationPrompter(new MyAuthPrompter(pa_name, pa_pass));
MyAuthPrompter是實(shí)現(xiàn)了AuthorizationPrompter接口的自定義類(lèi):
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)于頁(yè)面認(rèn)證
一個(gè)頁(yè)面是否需要認(rèn)證,以及要求認(rèn)證的信息可以通過(guò)HTTPClient/doc/GetAuthInfo.java來(lái)獲。
java GetAuthInfo http://some.host.dom/the/file.html
程序會(huì)輸出認(rèn)證信息包括認(rèn)證域。
附注:
下載要求用戶(hù)認(rèn)證的頁(yè)面時(shí),HTTPClient會(huì)彈出用戶(hù)名密碼以及作用域輸入框。假如需要取消輸入彈出對(duì)話(huà)框的話(huà),可以調(diào)用HTTPConnection的setAllowUserInteraction(false)方法。