关于HttpURLConnection中设置代理ip,生效延迟的讨论和请教

问题描述

我使用HttpURLConnection设置了一组代理ip222.165.130.82:80访问一个网站,然后立即换下一个代理ip200.117.239.246:8080重新访问这个站点,发现第二次的请求没有使用最新设置的代理设置,而是使用了第一次的222.165.130.82:80进行的通信,谁知道是为什么?我的猜测:怀疑HttpURLConnection内使用了缓存之类的东西——我在线程中sleep了20毫秒,发现新的设置生效了,等待时候很短的话(小于20毫秒的话),仍然使用了上一次的代理设置。设置的代码如下——if(auth.isProxy()){prop.setProperty("http.proxyHost",auth.getProxyIP());prop.setProperty("http.proxyPort",String.valueOf(auth.getProxyPort()));}else{prop.setProperty("http.proxyHost","");prop.setProperty("http.proxyPort","");}

2个线程代码——publicRunnabler1=newRunnable(){publicvoidrun(){Authenticationauth=newAuthentication();auth.setProxy(true);auth.setProxyIP("200.42.56.146");auth.setProxyPort(8080);Strings;try{s=GetWebContent("http://aa.com","gbk","GET",null,auth);System.out.println(s);}catch(Exceptione){e.printStackTrace();}}};publicRunnabler2=newRunnable(){publicvoidrun(){Authenticationauth=newAuthentication();auth.setProxy(false);auth.setProxyIP("200.117.239.246");auth.setProxyPort(8080);Strings;try{Thread.sleep(20);//每次改变代理ip后需要等待20ms左右才能生效s=GetWebContent("http://aa.com","gbk","GET",null,auth);System.out.println(s);}catch(Exceptione){e.printStackTrace();}}};newThread(r1).start();newThread(r2).start();

每次改变代理ip后需要等待20ms左右才能生效

解决方案

本帖最后由 makeppy 于 2011-11-20 19:47:35 编辑
解决方案二:
HELPME
解决方案三:
注意同步操作。
解决方案四:
引用2楼lw_china的回复:

注意同步操作。

设置代理的代码的作用域是全局的,GetWebContent是发起http请求的,该在哪里同步?——prop.setProperty("http.proxyHost","");prop.setProperty("http.proxyPort","");如何同步?
解决方案五:
什么东西是共用的,就同步什么。
解决方案六:
引用4楼lw_china的回复:

什么东西是共用的,就同步什么。

代理设置是公用,但是http的请求和代理设置如果同步的话,我的多线程就没有意义了呢?怎么办?
解决方案七:
必须用多线程吗?如果同步的结果==单线程的结果,为什么不直接用单线程处理呢?
解决方案八:
引用6楼nkliming的回复:

必须用多线程吗?如果同步的结果==单线程的结果,为什么不直接用单线程处理呢?

我的需要是同时检测N个代理ip的可用性,如果使用单线程的话,考虑到timeout等问题,时间太长了,等不起。。。。我大约有2000个ip。。。。
解决方案:
怎么搞到这么多代理IP呢
解决方案:
我在单线程运行下,也发现有延迟的问题,楼主解决了吗

时间: 2024-10-26 05:46:59

关于HttpURLConnection中设置代理ip,生效延迟的讨论和请教的相关文章

ip-httpclient如何设置代理IP,我设置了貌似没有设置上,还是封我本地IP

问题描述 httpclient如何设置代理IP,我设置了貌似没有设置上,还是封我本地IP 百度上我也看过了跟我写的都一样,我用的是这句 client.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, httphost); 但好像没用,我还是老是被封本地IP 还有说 这么设置的 client.getHostConfiguration().setProxy(host, prox); 但是我设置上直接报错, 请教高手下如何设置httpcli

qq2013怎么设置代理ip登陆?<图文教程>

一.确定我们的QQ是qq2013了,然后点击登录,在右上角有一个"齿轮"图标,如图所示. 二.然后我们点击"齿轮"图标,在网络设置类型中选择http代码或使用socks5代码都可以,这赶尝试使用http代码吧,后面的代理IP地址,我们百度去搜索几个即可. 三.提醒一下,关于http代理.qq代理.socks5代理等栏目中选择您想要代理的ip地址,复制地址和端口,粘贴到地址栏里面 四.按上面方法写好之后我们点击登录,如果登录成功了你的就是代理IP上网了,如果对方要查你

分享java中设置代理的两种方式_java

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 import java.net.Authenticator; import java.net.PasswordAuthentication; import java.util.Properties; public class ProxyDemo1 { public

如何单独的为webbrowser设置代理IP服务器?

问题描述 不影响其他的webbrowser以及IE 解决方案

java中如何设置代理

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 import java.net.Authenticator; import java.net.PasswordAuthentication; import java.util.Properties; public class ProxyDemo1 { public

Python程序中设置HTTP代理_python

0x00 前言 大家对HTTP代理应该都非常熟悉,它在很多方面都有着极为广泛的应用.HTTP代理分为正向代理和反向代理两种,后者一般用于将防火墙后面的服务提供给用户访问或者进行负载均衡,典型的有Nginx.HAProxy等.本文所讨论的是正向代理. HTTP代理最常见的用途是用于网络共享.网络加速和网络限制突破等.此外,HTTP代理也常用于Web应用调试.Android/IOS APP 中所调用的Web API监控和分析,目前的知名软件有Fiddler.Charles.Burp Suite和mi

C#使用代理IP使用方法

  简要介绍一:WebProxy :即HTTP 代理设置. 官方解释:WebProxy 类包含 WebRequest 实例用以确定是否使用 Web 代理发送请求的代理设置. 可以在计算机和应用程序配置文件中指定全局 Web 代理设置,并且应用程序可用 WebProxy 类的实例自定义 Web 代理的用途. 个人理解:即将代理IP.Port进行封装,并设置代理IP的用户名及密码,通过该用户名和密码登陆登陆代理主机并进行相关访问. 简要介绍二:HttpWebClientProtocol:所有使用 H

使用TaskManager爬取2万条代理IP实现自动投票功能

话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票.可是这种事做多了就会考虑能不能使用工具来进行投票呢,身为一名程序猿决定研究解决这个问题.于是有了以下思考 1.是否能一个人投多票,如果不行又是什么限制了一人投多票? 答:投票网站限制了一个IP或者一个用户只能投一票,防止恶意刷票行为 2.如果是一个IP一票那是否代表着多个IP就能投多票了呢? 答:答案是肯定的 3.用什么方法能够在代码里面改变自己请求的IP? 答:HTTP请求的时候设置

Win8系统无法设置静态IP地址的解决方案

  在Win8系统中设置静态IP却无法修改保存怎么办?下面系小编就为大家介绍一下具体解决办法. 1.如果您的网卡驱动一切正常,建议可以使用以下方法:WIN+X组合键,找到并打开设备管理器;找到网络适配器一项(根据各人的网络适配器有不同,有些电脑拥有无线和有线适配器.) 2.打开网络属性后点击安装--协议,点击添加--从磁盘安装,浏览定位至C:Windowsinfnettcpip.inf确定,再选择TCP/IPv4安装; 3.如果问题依旧的话请按"Windows+X"打开命令提示符(管理