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