我尝试通过代理下载Apache HttpClient 4.5的https页面。
某些下载成功完成,但与其他人一起收到错误。
为什么呢?我有什么问题吗?
// OriginalImage is RGBColor, CurrentImage is GrayScale, you could change this with minor adjusts.
Mat dest = OriginalImage.clone();
byte[] b = new byte[4];
for (int j= 0; j<OriginalImage.cols(); ++j)
{
for (int i=0; i<OriginalImage.rows(); ++i)
{
b[0] = (byte)Math.abs(OriginalImage.get(i,j)[0] - CurrentImage.get(i,j)[0]);
//b[1] = valor;
//b[2] = valor;
//b[3] = (byte)(255 & 0xFF);
dest.put(i,j, b);
}
}
CurrentImage = dest;
这是程序生成的输出:
package hu.istvanbohm.mypublist.test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
public class TestHttpClientDownloader {
public static void main(String[] args) throws URISyntaxException {
String rawUrl = "https://*********.com";
String[] proxies = {"1.161.158.86:8080","1.179.183.27:3128","1.179.201.18:3128","1.207.245.184:80",
"1.207.62.194:3128","1.234.28.160:80","1.234.28.18:80",
"1.234.28.20:80","1.234.28.36:80","1.234.28.42:80"};
URI targetUri = new URI(rawUrl);
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100);
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setRetryHandler(new StandardHttpRequestRetryHandler(0,false))
.setConnectionTimeToLive(25, TimeUnit.SECONDS )
.build();
for(String proxyString : proxies) {
String[] proxyParts = proxyString.split(":");
String proxyUrl = proxyParts[0];
int proxyPort = Integer.parseInt(proxyParts[1]);
HttpGet request = new HttpGet(targetUri);
RequestConfig config = RequestConfig.custom()
.setProxy(new HttpHost(proxyUrl,proxyPort))
.setCookieSpec(CookieSpecs.STANDARD)
.setSocketTimeout(25000)
.setConnectTimeout(25000)
.setConnectionRequestTimeout(25000)
.build();
request.setConfig(config);
HttpClientContext context = HttpClientContext.create();
context.setAttribute("http.protocol.handle-redirects", false);
HttpEntity entity = null;
try {
System.out.println("Submit: Executing request " + request.getRequestLine() +
" to " + request.getURI() + " via " + request.getConfig().getProxy());
CloseableHttpResponse response = httpClient.execute(request,context);
try {
entity = response.getEntity();
StatusLine statusLine = response.getStatusLine();
if(entity!=null && statusLine.getStatusCode()==HttpStatus.SC_OK) {
String result=EntityUtils.toString(entity,org.apache.http.entity.ContentType.getOrDefault(entity).getCharset());
if(result!=null && result.length()>0) System.out.println("Download OK!");
} else if(entity!=null){
System.out.println("Error - Http status is not OK: " + statusLine.getReasonPhrase());
}
} catch(Exception ex) {
System.out.println("Error - HttpClient response: " + ex.getMessage());
} finally {
if(entity!=null) {
EntityUtils.consume(entity);
}
if(response!=null) {
response.close();
}
}
} catch(Exception ex) {
System.out.println("Error - HttpClient execute: " + ex.getMessage());
}
}
try {
httpClient.close();
} catch (IOException ex) {
System.out.println("Error - HttpClient close: " + ex.getMessage());
}
cm.close();
}
}
带有扩展错误信息和示例网址的示例输出:
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.161.158.86:8080
Error - HttpClient execute: Remote host closed connection during handshake
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.179.183.27:3128
Download OK!
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.179.201.18:3128
Download OK!
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.207.245.184:80
Error - HttpClient execute: Connection reset
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.207.62.194:3128
Error - HttpClient execute: Connection reset
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.234.28.160:80
Error - HttpClient execute: Unrecognized SSL message, plaintext connection?
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.234.28.18:80
Error - HttpClient execute: Unrecognized SSL message, plaintext connection?
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.234.28.20:80
Error - HttpClient execute: Unrecognized SSL message, plaintext connection?
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.234.28.36:80
Error - HttpClient execute: Unrecognized SSL message, plaintext connection?
Submit: Executing request GET https://**********.com HTTP/1.1 to https://**********.com via http://1.234.28.42:80
Error - HttpClient execute: Unrecognized SSL message, plaintext connection?