2
語境
我有我用它來上傳文件(斑點)的谷歌應用程序Blob存儲桌面Java應用程序時被卡住。 一切工作正常與直接連接到互聯網,但它不通過HTTP代理(Squid)與身份驗證連接時。JAVA - 使用的HttpClient來發布文件,谷歌通過HTTP代理(SQUID)的應用程序調用execute
我使用的是httpClient 4.2.3,我沒有收到任何錯誤或響應。撥打httpClient.execute(post)
時,它會卡住。
代碼
我添加這些行來處理代理身份驗證和它的工作原理以及使用URL時,得到一個頁面:
System.setProperty("http.proxyUser", username);
System.setProperty("http.proxyPassword", password);
我想這些還有:
Authenticator.setDefault(
new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
username, password.toCharArray());
}
}
);
從現在開始,這是與不使用代理時相同的代碼。
首先我下載一個網頁,我得到的URL中使用的文件發佈到Blob存儲區:
URL url = new URL("http://www.example.com/get-upload-url.jsp");
String urlWhereToPost=IOUtils.toString(url.openStream());
DefaultHttpClient client = new DefaultHttpClient();
在這裏,我們準備多職:
HttpPost post
= new HttpPost(urlWhereToPost.trim());
MultipartEntity entity
= new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("key"
, new FileBody(new File(jpgFilePath)
, "image/jpeg")
);
post.setEntity((HttpEntity)entity);
它是當調用execute時什麼也沒有發生(並且它永遠不會到達下一條指令):
HttpResponse execute = client.execute(post);
測試
我一直在嘗試一些東西,但沒有奏效:
- 一開始我還以爲這個問題是使用POST因爲GET工作正常使用
URL()
但我試着用HttpClient
執行GET和它卡住以及。 - 我用Wireshark檢查發送到代理的數據包,我看到使用
URL()
時Wireshark將代理的調用識別爲從代理執行GET的請求。但是當使用httpClient時,它看起來好像請求沒有很好地構建,因爲Wireshark顯示了一個數據包,但不能識別內部請求。 - 然後我嘗試使用
HttpURLConnection
來構建POST,它通過代理獲取並從服務器獲得答案,但它看起來像我沒有很好地構建它,因爲appengine沒有找到我發送的文件(但這會是另一個問題...)。
結論
任何有同樣的問題?任何想法?
對,我試過這個配置,以及和我與你鏈接的代碼再次嘗試,但結果是一樣的,要求 的HttpResponse響應= httpclient.execute(targetHost當它被卡住,httpget); – centellenc