用Java来抓取网页实例中HttpClient类的问题

报这么一大堆错误我也是受不了了......

主要的问题应该是HttpClient类这个东西,在网上查了这个类是httpclient-2.x.jar包的产物,我导入的是httpclient-4.2.2.jar和httpcore-4.2.2.jar包,而这两个新的工具包并不包含HttpClient类,查阅了Java API帮助文档后,自己并没有找到HttpClient类的替代类,而是一堆接口和抽象类,由于是刚开始写这个,所以有点懵。

所以求助大神么,这个应该怎么处理,如果是可以替换,用哪个类或者接口呢?

图片说明

图片说明

图片说明

图片说明
Java网页抓取示例代码:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;

public class RetrivePage {
private static HttpClient httpClient = new HttpClient();
// 设置代理服务器
static {
// 设置代理服务器的IP地址和端口
httpClient.getHostConfiguration().setProxy("172.17.18.84", 8080);
}

public static boolean downloadPage(String path) throws HttpException,
        IOException {
    InputStream input = null;
    OutputStream output = null;
    // 得到post方法
    PostMethod postMethod = new PostMethod(path);
    // 设置post方法的参数
    /*
     * NameValuePair[] postData = new NameValuePair[2]; postData[0] = new
     * NameValuePair("name","lietu"); postData[1] = new
     * NameValuePair("password","*****");
     * postMethod.addParameters(postData);
     */
    // 执行,返回状态码
    int statusCode = httpClient.executeMethod(postMethod);
    // 针对状态码进行处理 (简单起见,只处理返回值为200的状态码)
    if (statusCode == HttpStatus.SC_OK) {
        input = postMethod.getResponseBodyAsStream();
        //得到文件名
        String filename = path.substring(path.lastIndexOf('/')+1);
        //获得文件输出流
        output = new FileOutputStream(filename);
        //输出到文件
        int tempByte = -1;
        while((tempByte=input.read())>0){
            output.write(tempByte);
        }
        //关闭输入输出流
        if(input!=null){
            input.close();
        }
        if(output!=null){
            output.close();
        }
        return true;
    }
    //若需要转向,则进行转向操作
    if ((statusCode == HttpStatus.SC_MOVED_TEMPORARILY) || (statusCode == HttpStatus.SC_MOVED_PERMANENTLY) || (statusCode == HttpStatus.SC_SEE_OTHER) || (statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
        //读取新的URL地址
        Header header = postMethod.getResponseHeader("location");
        if(header!=null){
            String newUrl = header.getValue();
            if(newUrl==null||newUrl.equals("")){
                newUrl="/";
                //使用post转向
                PostMethod redirect = new PostMethod(newUrl);
                //发送请求,做进一步处理。。。。。
            }
        }
    }
    return false;
}

/**
 * 测试代码
 */
public static void main(String[] args) {
    // 抓取lietu首页,输出
    try {
        RetrivePage.downloadPage("http://www.lietu.com");
    } catch (HttpException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}


3个回答

需要的jar是commons-httpclient-3.x.jar

问一下题主,这个方法能捕获带有ajax请求的页面代码么?

网络爬虫之java基础【maven的使用】
需要引入jar包,在ecliplse中,可以使用maven引入jar包,操作轻松简单。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
httpclient 代理 问题
public static void main(String[] args) throws Exception { System.out.println(doPost("http://172.21.0.158:8181/ShiroWeb/login")); } public static String doPost(String url) throws Exception{ String result = ""; // 创建HttpClient实例 CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建Post方法实例 HttpPost httpPost = new HttpPost(url); HttpHost proxy = new HttpHost("180.97.237.199", 8080); RequestConfig requestConfig = RequestConfig.custom().setProxy(proxy).build(); httpPost.setConfig(requestConfig); httpPost.setHeader("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); //执行请求 CloseableHttpResponse response = httpclient.execute(httpPost); //返回的请求内容 HttpEntity entity = response.getEntity(); int statusCode = response.getStatusLine().getStatusCode(); if(statusCode == 200){ result = entity.toString(); } return result; } 用代理访问 www 开头的网站就可以,但是访问自己主机 就不行,因为我想看看一下ip是不是真的变成代理的ip . 。我在自己服务器打了断电并且用request.getr emoteAd dr() ; 获取ip 。 现在问题是这样访问不了 repones 状态吗:504.
httpclient的疑问求解答!
&nbsp;&nbsp;&nbsp; 我使用httpclient来爬去固定一些网站的数据信息,由于使用了线程池因此在抓取的时候经常碰到有异常! <br /> <br /><pre name="code" class="java"> Exception in thread "pool-226-thread-200" java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated. Make sure to release the connection before allocating another one. at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:199) at org.apache.http.impl.conn.SingleClientConnManager$1.getConnection(SingleClientConnManager.java:173) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:390) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) at com.hc.HttpClientFactory.httpGet(HttpClientFactory.java:127) at com.hc.Fetcher.fetchType(Fetcher.java:449) at com.hc.Fetcher.fetchType(Fetcher.java:466) at com.hc.Fetcher.fetchType(Fetcher.java:466) at com.hc.Fetcher.httpByCode(Fetcher.java:286) at com.hc.Fetcher.FetchHtml(Fetcher.java:72) at com.thread.FetchHtml.fetchStart(FetchHtml.java:64) at com.thread.FetchHtml.run(FetchHtml.java:209) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) </pre> <br /> <br /> <br />这里有我的线程池的实现: <br /><pre name="code" class="java"> logger.debug("启动"); // 获得抓取配置数据 List songsList = songsService.getSongs(); List provList = provService.getProvs(); if (0 &lt; songsList.size() &amp;&amp; 0 &lt; provList.size()) { // 构造一个线程池 ThreadPoolExecutor // 构造一个线程池 producerPool = new ThreadPoolExecutor(40, 80, 1, TimeUnit.SECONDS, new ArrayBlockingQueue&lt;Runnable&gt;(songsList.size() * provList.size()),new ThreadPoolExecutor.CallerRunsPolicy()); // 循环开始抓取数据 for (Object objS : songsList) { // 得到单条彩铃信息 Map sMap = (Map) objS; for (Object objP : provList) { // 得到单个省份抓取配置信息 Map pMap = (Map) objP; if (sMap.get("TELTYPE").equals(pMap.get("TELTYPE"))) { FetchHtml fhFetchHtml = new FetchHtml(sMap, pMap); producerPool.execute(fhFetchHtml); } } } // 停止线程 producerPool.shutdown(); } logger.debug("结束"); </pre> <br /> <br />这里是我httpclient的配置信息: <br /><pre name="code" class="java"> import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.net.ssl.SSLHandshakeException; import org.apache.http.HttpEntity; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; import org.apache.http.NameValuePair; import org.apache.http.NoHttpResponseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.HttpRequestRetryHandler; import org.apache.http.client.ResponseHandler; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHeader; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.params.CoreProtocolPNames; import org.apache.http.protocol.ExecutionContext; import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import com.anal.UtilComm; public class HttpClientFactory { private static final String CHARSET_GBK = "GBK"; /** * 异常自动恢复处理 * 使用HttpRequestRetryHandler接口实现请求的异常恢复 */ private static HttpRequestRetryHandler requestRetryHandler = new HttpRequestRetryHandler() { // 自定义的恢复策略 public synchronized boolean retryRequest(IOException exception, int executionCount, HttpContext context) { // 设置恢复策略,在发生异常时候将自动重试3次 if (executionCount &gt; 3) { // 超过最大次数则不需要重试 return false; } if (exception instanceof NoHttpResponseException) { // 服务停掉则重新尝试连接 return true; } if (exception instanceof SSLHandshakeException) { // SSL异常不需要重试 return false; } HttpRequest request = (HttpRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST); boolean idempotent = (request instanceof HttpEntityEnclosingRequest); if (!idempotent) { // 请求内容相同则重试 return true; } return false; } }; /** * 使用ResponseHandler接口处理响应 * HttpClient使用ResponseHandler会自动管理连接的释放 * 解决了对连接的释放管理 */ private static ResponseHandler&lt;String&gt; responseHandler = new ResponseHandler&lt;String&gt;() { // 自定义响应处理 public synchronized String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { HttpEntity entity = response.getEntity(); if (entity != null) { String charset = EntityUtils.getContentCharSet(entity) == null ? CHARSET_GBK : EntityUtils.getContentCharSet(entity); return new String(EntityUtils.toByteArray(entity), charset); } else { return null; } } }; /** * 获取DefaultHttpClient实例 * * @param charset * 参数编码集, 可空 * @return DefaultHttpClient 对象 */ public static DefaultHttpClient getDefaultHttpClient(final String charset){ DefaultHttpClient httpclient = new DefaultHttpClient(); ArrayList headers = new ArrayList(); headers.add(new BasicHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*")); headers.add(new BasicHeader("Accept-Language", "zh-cn,en-us,zh-tw,en-gb,en;")); headers.add(new BasicHeader("Accept-Charset","gbk,gb2312,utf-8,BIG5,ISO-8859-1;")); headers.add(new BasicHeader("Connection","Close")); headers.add(new BasicHeader("Cache-Control","no-cache")); headers.add(new BasicHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; CIBA)")); httpclient.getParams().setParameter("http.default-headers", headers); //设置http头信息 httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); //模拟浏览器,解决一些服务器程序只允许浏览器访问的问题 httpclient.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, charset == null ? HTTP.UTF_8 : charset); httpclient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,30000); httpclient.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT,60000); httpclient.setHttpRequestRetryHandler(requestRetryHandler); return httpclient; } /** * get方式提交抓取网页 * * @param url * @param charset * @throws IOException * @throws ClientProtocolException * @throws IOException */ public static String httpGet(HttpClient httpClient, String url, String charset) throws ClientProtocolException, IOException { HttpGet httpget = new HttpGet(url); String content = null; // 发送请求,得到响应 HttpResponse response = httpClient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null &amp;&amp; HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { charset = EntityUtils.getContentCharSet(entity) == null ? CHARSET_GBK : EntityUtils.getContentCharSet(entity); content = UtilComm.getString(entity.getContent(),charset); } abortRequest(httpget); return content; } /** * post方式提交抓取网页 * * @param url * @param charset * @throws IOException * @throws ClientProtocolException */ public static String httpPost(HttpClient httpClient, String url, String charset) throws ClientProtocolException, IOException { HttpPost httppost = new HttpPost(url); // 得到提交的POST值 List&lt;NameValuePair&gt; nvpsList = UtilComm.getNameValuePairs(url); httppost.setEntity(new UrlEncodedFormEntity(nvpsList, charset)); // 得到返回值 String content = null; HttpResponse response = httpClient.execute(httppost); HttpEntity entity = response.getEntity(); if (entity != null &amp;&amp; HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { charset = EntityUtils.getContentCharSet(entity) == null ? CHARSET_GBK : EntityUtils.getContentCharSet(entity); content = UtilComm.getString(entity.getContent(),charset); } abortRequest(httppost); return content; } /** * 释放HttpClient连接 * * @param hrb * 请求对象 * @param httpclient * client对象 */ public static void abortRequest(final HttpRequestBase hrb){ if (hrb != null &amp;&amp; hrb.isAborted()) { hrb.abort(); } } public static void shutdown(final HttpClient httpclient) { if (httpclient != null) { httpclient.getConnectionManager().shutdown(); } } } </pre> <br /> <br />经常碰到这类异常,帮忙看看,什么原因造成的呢?
JAVA实现获取QQ通讯录功能
最近在研究HttpClient,不过在获取QQ通讯录的时候,有一个问题,用数字模拟登录需要验证码; 但是开心吧,或者City都能够通过QQ号码和密码,获取好友通讯录,请教有什么办法实现? 只要有实现方法都给分,包括用其它语言实现,用JAVA实现也给分! [b]问题补充:[/b] 开心和City是不是通过腾讯的API获取的? (好像API不公开,不过类似lumaqq,之类的工具,也肯定是根据协议获取的) API 应该没有公开,lumaqq好像关掉了,协议的话不知道,但按理来说应该不会去跟腾讯买接口吧? [b]问题补充:[/b] 谢谢bohemia提供的资料! 也谢谢lewhwa的方向! lumaqq就是通过抓包来确定协议的,典型的反向工程。 在JAVA这块,有没有相关的资料? [b]问题补充:[/b] 从搜搜Lumaqq,在结合它所对应的QQ版本,看看它的思路。然后咱们就用ethreal来抓取验证块的网络包。lumaqq和珊瑚QQ等等都是这样做的。 协议与语言无关,可以给Wireshark抓包软件的连接: http://www.wireshark.org/ 有没有比较小的测试实例可以熟悉一下! [b]问题补充:[/b] 这块没有研究过,还有一个问题必须考虑,如果从真的实现这个功能,从输入用户名和密码,接着实现这些过程,调用方法,到获得通讯录之间的时间差,会不会太长,首先感觉有点复杂,可能是菜鸟的原因,再则有点担心太久,如果时间差超过8秒,我想这个Solution应该不好! [b]问题补充:[/b] 请问有没有开心吧或者City的人,给一个最直观与最有效的实现方案,如果涉及机密的话,可以给出一个方向! 小弟无尽感激!
java读取网页数据超时
[code="java"]public static void main(String[] args) throws IOException { getWebData("http://bbs.csdn.net/topics/380263902"); } private static String getWebData(String strurl) { try { URL url = new URL(strurl); // 打开连接,此处只是创建一个实例,并没有真正的连接 HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); httpCon.setConnectTimeout(300000); httpCon.setReadTimeout(300000); httpCon.connect();//建立连接 InputStream inputStream = httpCon.getInputStream(); InputStreamReader inputReader = new InputStreamReader(inputStream,"utf-8"); BufferedReader bufferReader = new BufferedReader(inputReader); StringBuffer sb = new StringBuffer(); String inputLine = null; while ((inputLine = bufferReader.readLine()) != null) { sb.append(inputLine+"\n"); } bufferReader.close(); inputReader.close(); inputStream.close(); httpCon.disconnect(); System.out.println(sb.toString().trim()); return sb.toString(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("======================================================="); return null; }[/code] 代码如上,但是执行上面代码报如下错误 java.net.ConnectException: Connection timed out: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.<init>(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at test.getWebData(test.java:30) at test.main(test.java:18) 我通过IE浏览器是可以打开http://bbs.csdn.net/topics/380263902该页面的,但是通过代码就不能获取页面数据,不知道是什么原因
网络爬虫下载网页的问题
下载网页时只能下载第一个网页,后续网页虽然能爬出来,但是无法下载到本地。下载网页的代码如下 public class FileDownLoader { /**根据 url 和网页类型生成需要保存的网页的文件名 *去除掉 url 中非文件名字符 */ public String getFileNameByUrl(String url,String contentType) { url=url.substring(7);//remove http:// if(contentType.indexOf("html")!=-1)//text/html { url= url.replaceAll("[\\?/:*|<>\"]", "_")+".html"; return url; } else//如application/pdf { return url.replaceAll("[\\?/:*|<>\"]", "_")+"."+ contentType.substring(contentType.lastIndexOf("/")+1); } } /**保存网页字节数组到本地文件 * filePath 为要保存的文件的相对地址 */ private void saveToLocal(byte[] data,String filePath) { try { DataOutputStream out=new DataOutputStream( new FileOutputStream(new File(filePath))); for(int i=0;i<data.length;i++) out.write(data[i]); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } /*下载 url 指向的网页*/ public String downloadFile(String url) { String filePath=null; /* 使用 GetMethod 来访问一个 URL 对应的网页,需要如下一些步骤。 1 生成一个 HttpClinet 对象并设置相应的参数。 2 生成一个 GetMethod 对象并设置响应的参数。 3 用 HttpClinet 生成的对象来执行 GetMethod 生成的 Get 方法。 4 处理响应状态码。 5 若响应正常,处理 HTTP 响应内容。 6 释放连接*/ /* 1.生成 HttpClinet 对象并设置参数*/ HttpClient httpClient=new HttpClient(); //设置 Http 连接超时 5s httpClient.getHttpConnectionManager().getParams(). setConnectionTimeout(5000); /*2.生成 GetMethod 对象并设置参数*/ //使用 GetMethod 来访问一个 URL 对应的网页 GetMethod getMethod=new GetMethod(url); //设置 get 请求超时 5s getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,5000); //设置请求重试处理,用的是默认的重试处理:请求三次 getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); /*3.执行 HTTP GET 请求*/ try{ /*executeMethod返回值是一个整数,表示了执行该方法后服务器返回的状态码, 该状态码能表示出该方法执行是否成功,需要认证或者页面发生了跳转(默认状态下GetMethod的实例是自动处理跳转的)*/ int statusCode = httpClient.executeMethod(getMethod); //判断访问的状态码 if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: "+ getMethod.getStatusLine()); filePath=null; } /*4.处理 HTTP 响应内容(返回的状态码正确后,即可取得内容)*/ /*取得目标地址的内容有三种方法: 1 getResponseBody,该方法返回的是目标的二进制的byte流; 2 getResponseBodyAsString,返回的是String类型,值得注意的是该方法返回的String的编码是根据系统默认的编码方式,所以返回的String值可能编码类型有误 3 getResponseBodyAsStream,这个方法对于目标地址中有大量数据需要传输是最佳的。 在这里我们使用了最简单的getResponseBody方法。*/ byte[] responseBody = getMethod.getResponseBody();//读取为字节数组 //根据网页 url 生成保存时的文件名 filePath="E:\\java\\web spider\\"+getFileNameByUrl(url, getMethod.getResponseHeader("Content-Type").getValue()); saveToLocal(responseBody,filePath); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("Please check your provided http address!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 e.printStackTrace(); } finally { // 释放连接 getMethod.releaseConnection(); } return filePath; } } 调用他的爬行代码如下: public class Crawler { /* 使用种子 url 初始化 URL 队列*/ String results=""; private void initCrawlerWithSeeds(String[] seeds) { for(int i=0;i<seeds.length;i++) LinkDB.addUnvisitedUrl(seeds[i]); } /* 爬取方法*/ public void crawling(String[] seeds,JTextArea kkk) { LinkFilter filter = new LinkFilter(){ //提取以 用户输入的URL开头的链接 public boolean accept(String url) { if(url.startsWith(url)) return true; else return false; } }; //初始化 URL 队列 initCrawlerWithSeeds(seeds); //循环条件:待抓取的链接不空且抓取的网页不多于 1000 while(!LinkDB.unVisitedUrlsEmpty()&&LinkDB.getVisitedUrlNum()<=1000) { //队头 URL 出对 String visitUrl=LinkDB.unVisitedUrlDeQueue(); if(visitUrl==null) continue; FileDownLoader downLoader=new FileDownLoader(); //下载网页 downLoader.downloadFile(visitUrl); //该 url 放入到已访问的 URL 中 LinkDB.addVisitedUrl(visitUrl); //提取出下载网页中的 URL Set<String> links=HtmlParserTool.extractLinks(visitUrl,filter); Iterator<String> it = links.iterator(); //迭代器 while(it.hasNext()) { results=results+'\n'+it.next(); } kkk.setText(results); } } } 求各位大神帮忙解答,马上就要中期检查了
httpclient-4.5.2读取超时,重发没起到作用,为什么?
1、写了一个httpclient的工具类,也写了重试的逻辑, 但是在多个线程在使用同一个httpclient实例的时候, 发现线程read time out的超时并没有被重发很郁闷(线程直接进入的SocketTimeoutException异常, 导致本次线程的请求没有拿到再次重发后的结果,导致数据丢失) public CloseableHttpClient getHttpClient() { return HttpClients.custom(). setConnectionManager(connMrg). setKeepAliveStrategy(myStrategy). setDefaultRequestConfig(requestConfig). setConnectionManagerShared(true). setMaxConnTotal(maxTotal). setRetryHandler( new HttpRequestRetryHandler() { @Override public boolean retryRequest(IOException exception , int executionCount , HttpContext context) { // 重试3次,从3开始 if (executionCount > 3) { return false; } /* if (exception instanceof NoHttpResponseException) { System.out.println( "[NoHttpResponseException has retry request:" + context.toString() + "][executionCount:" + executionCount + "]"); return true; } else if (exception instanceof SocketException || exception instanceof ConnectTimeoutException || exception instanceof SocketTimeoutException ) { System.out.println("[SocketException has retry request:" + context.toString() + "][executionCount:" + executionCount + "]"); return true; } */ if (exception instanceof UnknownHostException) { return false; } // SSL handshake exception if (exception instanceof SSLException) { return false; } //除上述两种异常其他异常均重试3次,其实主要问题在于 //服务端对连接数限制,会导致你再怎么重试,都会异常,连接数满了,重试还有毛用 //所以设置连接池的时候需要设置的比他们的最大值小,用完要及时释放到连接池 String time3 = new SimpleDateFormat("HH:mm:ss.SSS").format(new Date()); System.out.println("time:"+time3+"="+Thread.currentThread().getName() +"\n"+"[Exception:"+exception.toString()+" has retry request:" + context.toString() + "][executionCount:" + executionCount + "]"); return true; } } ). build(); } 问题3: String time3 = new SimpleDateFormat("HH:mm:ss.SSS").format(new Date()); System.out.println("time:"+time3+"="+Thread.currentThread().getName() +"\n"+"[Exception:"+exception.toString()+" has retry request:" + context.toString() + "][executionCount:" + executionCount + "]"); return true; 这段代码发生read time out的时候执行了,但是executionCount一直都是1,我理解应该是重发了一次,但是子线程里的日志打印了异常,并没有获取到重试后的结果 问题4,子线程取数据逻辑,只写了主要逻辑 httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8"); // httpPost.setHeader("SOAPAction", ""); StringEntity data = new StringEntity(inputPara, Charset.forName("UTF-8")); httpPost.setEntity(data); try { response = httpClient.execute(httpPost); httpEntity = response.getEntity(); if (httpEntity != null) { // 获取响应内容 returnVal = EntityUtils.toString(httpEntity, "UTF-8"); // 消费掉节约内存,并关闭inputstream流 EntityUtils.consume(httpEntity); } } catch (Exception e) { e.printStackTrace(); } finally { try { // 关闭流并释放资源 response.close(); } catch (Exception e) { e.printStackTrace(); } } 我认为在这段的httpEntity = response.getEntity();执行的时候 readtime out,然后代码直接进入了catch逻辑,所以重发后的结果并没有取到。 问题5: 1、我就是想解决,读取超时就重发,一直到3次结束。 2、是不是我设置的读取超时时间为60s导致根本没办法重发,服务端可能已经把短连接关闭了 因为http默认短连接时间好像就是60s。我猜测,如果我设置读取时间为10s,可能就可以重试3次了。 3、 try{ httpEntity = response.getEntity(); } catch() { } 这段逻辑跟 创建httpclient的方法里面的重试方法,当发生异常时,到底是这段阻塞httpEntity = response.getEntity(); 等待3次重发?还是是异步的,里面重发,外面直接进入异常逻辑,根本不等重发后的结果
PostMethod获取post提交的页面代码
:( http://lsg.cnki.net/grid20/Brief.aspx?ID=1&classtype=&systemno=&NaviDatabaseName=&NaviField= 这个是中国期刊网的检索请求,我现在需要通过这个来获取检索出来的信息,解决方法已经有了,就是得不到检索信息,查询内容是空的。 应该是少add了一些检索所需内容。 下面是我写的代码: [code="java"] import java.io.IOException; import java.util.Calendar; import java.util.GregorianCalendar; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; public class PostTest { public static void main(String[] args){ PostMethod postMethod = new PostMethod("http://lsg.cnki.net/grid20/Brief.aspx?ID=1&classtype=&systemno=&NaviDatabaseName=&NaviField="); postMethod.addParameter("advancedvalue1","java"); postMethod.addParameter("advancedfield1","主题"); postMethod.addParameter("yearstart","1979"); postMethod.addParameter("yearend",String.valueOf(GregorianCalendar.getInstance().get(Calendar.YEAR))); postMethod.addParameter("RecordsPerPage","20"); postMethod.addParameter("SearchRange","All"); postMethod.addParameter("searchmatch","0"); postMethod.addParameter("order","dec"); postMethod.addParameter("display","chinese"); postMethod.addParameter("NaviDatabaseName","ZJCLS"); postMethod.addParameter("encode","gb"); postMethod.addParameter("VarNum","1"); postMethod.addParameter("singleleafcode","J"); postMethod.addParameter("strNavigatorName",",A,B,C,D,E,F,G,H,I,J"); postMethod.addParameter("strNavigatorValue",",理工A(数学物理力学天地生),理工B(化学化工冶金环境矿业),理工C(机电航空交通水利建筑能源),农业,医药卫生,文史哲,政治军事与法律,教育与社会科学综合,电子技术及信息科学,经济与管理"); HttpClient client = new HttpClient(); client.setConnectionTimeout(1000 * 60); int status=0; try { status = client.executeMethod(postMethod); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(status==HttpStatus.SC_OK) { makeResponseObject(postMethod.getResponseBodyAsString()); } else { } postMethod.releaseConnection(); } // 根据HTTP请求后返回的字串生成结果封装类的实例 private static void makeResponseObject(String sResponse) { System.out.println("-------------------"+sResponse); System.out.println("-------------------"); String regExNums = "<TD\\s*style=\"FONT-SIZE:\\s*9pt;\\s*COLOR:\\s*#000000;\\s*WORD-WRAP:\\s*break-word\"\\s*vAlign=center\\s*bgColor=#f4f5f6\\s*height=30>\\s*共有记录\\s*(\\d+)\\s*条\\s* \\s*</TD>"; String regExData = "<TR>\\s*<TD\\s*style=\"FONT-SIZE:\\s*9pt;\\s*WORD-WRAP:\\s*break-word\"\\s*(?:align=left)?\\s*bgColor=#\\S+\\s*>([\\s\\S]*?)</TR>"; String regExPage = "<TD\\s*style=\"FONT-SIZE:\\s*9pt;\\s*COLOR:\\s*#000000;\\s*WORD-WRAP:\\s*break-word\"\\s*vAlign=center\\s*bgColor=#f4f5f6\\s*height=30>\\s*<A\\s*href=\"(.*)\">(?:上页|下页)</A>"; } } [/code] 这里应该有高手把,希望别让我失望,先谢谢大家了。 [b]问题补充:[/b] 一楼的你和没说一样。。你随便看一眼也知道是post。 你请求的页面有两个form,左边一个,右边一个,你递交的是右边的form查询。左边的条件没有传过去,也就是分类信息没有传过去,分类信息是必须要有的。 这位大哥,谢谢了。。我知道分类信息,现在就是不知道怎么加这个分类信息,你能帮我看看吗?
httppost = new HttpPost(Uri) 返回值为null! 不知道为什么
RT http.java public class Http { static HttpEntity entity; //HttpEntity是可以同Http消息进行接受或发送的实体,可以是流或者字符串 static HttpResponse response; //HttpResponse是一个Http连接响应,可以通过它来获得一些响应的信息 static HttpPost httppost; static HttpClient httpclient; static Context context; public String strResult; public String Get(String Uri) { return null; } public String Post(final String Uri, final List<NameValuePair> params) { new Thread() { @Override public void run() { // TODO Auto-generated method stub try { //客户端数据打包 httpclient = new DefaultHttpClient();//新建httpclient对象, 默认的Http客户端,可以用它来创建HTTP连接 httppost = new HttpPost(Uri); //新建httppost对象, 连接url httppost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8)); //客户端发送数据请求,并得到服务器返回数据 response = httpclient.execute(httppost); //获取HttpResponse实例 entity = response.getEntity(); // 得到内容 if (response.getStatusLine().getStatusCode() == 200) { // 取出回应字串 strResult = EntityUtils.toString(response.getEntity()); } } catch (Exception e) { e.printStackTrace();// 报错识别 } super.run(); } }.start(); return strResult; } } NetUtil。java public class NetUitl { public String register(String Username, String Password,String Idcard,String Name,String Sex,int Tel) { String Uri = "http://127.0.0.1:8080/Client/Register"; String tel=String.valueOf(Tel); ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("Username", Username)); params.add(new BasicNameValuePair("Password", Password)); params.add(new BasicNameValuePair("Idcard", Idcard)); params.add(new BasicNameValuePair("Sex", Sex)); params.add(new BasicNameValuePair("Realname", Name)); params.add(new BasicNameValuePair("Tel", tel)); return new Http().Post(Uri, params); } register。java public class register extends Activity { EditText username,password,idcard,name,sex,time,tel; Button register,login; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.register); username=(EditText) findViewById(R.id.zhuceusername); password=(EditText) findViewById(R.id.zhucepassword); idcard=(EditText) findViewById(R.id.zhuceidcard); name=(EditText) findViewById(R.id.zhucename); sex=(EditText) findViewById(R.id.zhucesex); tel=(EditText) findViewById(R.id.zhucetel); register=(Button) findViewById(R.id.zhuce); login=(Button) findViewById(R.id.denglu); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub register.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub try{ if(!username.getText().toString().equals("")&&!password.getText().toString().equals("")&& !idcard.getText().toString().equals("")&&!name.getText().toString().equals("")&& !sex.getText().toString().equals("")&&!tel.getText().toString().equals("")){ String f=new NetUitl().register(username.getText().toString(),password.getText().toString(), idcard.getText().toString(), name.getText().toString(), sex.getText().toString(), Integer.valueOf(tel.getText().toString())); if(f.equals("true")){ Intent intent=new Intent(register.this,zhucesuccess.class); startActivity(intent); finish();} }else{ Toast.makeText(register.this, "内容不能为空!", Toast.LENGTH_SHORT).show();} }catch(Exception e){ Toast.makeText(register.this, "注册失败,服务器连接错误", Toast.LENGTH_SHORT).show(); }}}); }}).start(); login.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent=new Intent(register.this,Login.class); startActivity(intent); } }); } } 就是注册不成功,求大神帮帮忙 我补充一下,我执行register.java的register的click事件后,会报String f=new NetUitl().register(...)空指针,我debug后,发现原来是http.java文件中httppost = new HttpPost(Uri);空指针。
Android http client response500错误,求大神帮忙看看代码!
http://121.42.195.113/usay/register.jsp服务器这里没错啊。。。。但不知道为什么放到安卓上就不行 package com.example.demo_jsom1; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { // 声明控件 //private EditText et_name, et_pass; private TextView tv_result; Handler handler =new Handler(){ @Override //当有消息发送出来的时候就执行Handler的这个方法 public void handleMessage(Message msg){ super.handleMessage(msg); //根据msg需求处理UI switch(msg.what){ case 1: String response = (String) msg.obj; tv_result.setText(response); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取控件对象 //et_name = (EditText) findViewById(R.id.et_name); //用户名控件 //et_pass = (EditText) findViewById(R.id.et_pass);//密码控件 //tv_result = (TextView) findViewById(R.id.tv_result);//服务器端返回数据显示的控件 Button a = (Button) findViewById(R.id.login); tv_result = (TextView)findViewById(R.id.JSONtextView); a.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.login: SENDREQUEST(); Log.i("connectbutton", "1"); break; default: break; } } private void SENDREQUEST() { // TODO Auto-generated method stub new Thread() { @Override public void run() { try{ //网络传输 HttpClient httpclient = new DefaultHttpClient(); String uri = "http://121.42.195.113/usay/register.action"; HttpPost httppost = new HttpPost(uri); JSONObject obj = new JSONObject(); //放入键值对 obj.put("userAccount", "15602385611"); obj.put("userPassword", "123qwertyuiop"); //封装好发送 httppost.setEntity(new StringEntity(obj.toString()) ); //创建接收实例 HttpResponse reponse = httpclient.execute(httppost); //检验状态吗,如果成功接收数据 HttpEntity entity = reponse.getEntity(); int code = reponse.getStatusLine().getStatusCode(); Log.i("connectif", code +""); if(code == 200) { String rev = EntityUtils.toString(reponse.getEntity()); obj = new JSONObject(rev); //接收数据 String result = obj.getString("result"); //将服务器中返回的结果存放进message中 Message message = new Message(); message.what = 1; //obj传入对象 message.obj = result; handler.sendMessage(message); Log.i("result", result); }else{ Log.i("connectfalse", "4"); } }catch(ClientProtocolException e) { }catch(IOException E){ } catch (Exception e){ e.printStackTrace(); } } }.start(); } } ``` ```
android控件不展示,求大神解决
小弟刚刚学习android,新手一枚,这两天再搞android通过webservice取的数据展示到listview上 我经过调试,确定数据已经取到,sql也非常简单,select * from table,但是list控件并没有展示到模拟器上,搞了很久也没找到问题的根本,希望有大神能够帮助指点一下,感激不尽 以下是我的android代码: package com.dcdz.carmensys; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.dcdz.db.DbHelper; import com.example.carmensys.R; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ListActivity; import android.view.Menu; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends ListActivity { DbHelper db=new DbHelper(); private PreparedStatement pstmt; private ResultSet resultSet; ArrayList<HashMap<String,String>> list=new ArrayList<HashMap<String,String>>(); SimpleAdapter sp=null; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Thread th=new Thread(ran); th.start(); } Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); showList(); } }; public void showList(){ SimpleAdapter sp=new SimpleAdapter(this, list, R.layout.listitemone, new String[]{"userid","username","usertime"}, new int[]{R.id.userid,R.id.username,R.id.usertime}); setListAdapter(sp); } Runnable ran=new Runnable() { @Override public void run() { getlist(); } }; public void getlist(){ HashMap<String, String> map =new HashMap<String, String>(); String requestUrl="http://192.168.1.104:8080/SysCarMen/servlet/getListServlet"; HttpClient client = new DefaultHttpClient(); // 根据URL创建HttpPost实例 mm HttpPost post = new HttpPost(requestUrl); HttpGet getx=new HttpGet(requestUrl); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("", "")); try { // 设置URL编码 post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); // 发送请求并获取反馈 HttpResponse response = client.execute(post); // 判断请求是否成功处理 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 解析返回的内容 String result = EntityUtils.toString(response.getEntity()); JSONArray jsonArray = new JSONArray(result); JSONObject jsonObject; for (int i = 0; i < jsonArray.length(); i++) { jsonObject = jsonArray.getJSONObject(i); list.add(getMap(jsonObject.toString())); } System.out.println(list.toArray()); } } catch (Exception e) { e.printStackTrace(); } } public static HashMap<String, String> getMap(String jsonString) { JSONObject jsonObject; try { jsonObject = new JSONObject(jsonString); @SuppressWarnings("unchecked") Iterator<String> keyIter = jsonObject.keys(); String key; String value; HashMap<String, String> valueMap = new HashMap<String, String>(); while (keyIter.hasNext()) { key = (String) keyIter.next(); value = jsonObject.get(key).toString(); valueMap.put(key, value); } return valueMap; } catch (JSONException e) { e.printStackTrace(); } return null; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } ``` ```
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
2019年还剩1天,我从外包公司离职了
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了
我一个37岁的程序员朋友
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...
计算机网络的核心概念
这是《计算机网络》系列文章的第二篇文章 我们第一篇文章讲述了计算机网络的基本概念,互联网的基本名词,什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨一下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击。 网络核心 网络的核心是由因特网端系统和链路构成的网状网络,下面这幅图正确的表达了这一点 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢?...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
程序员如何通过造轮子走向人生巅峰?
前言:你所做的事情,也许暂时看不到成果。但不要灰心,你不是没有成长,而是在扎根。 程序员圈经常流行的一句话:“不要重复造轮子”。在计算机领域,我们将封装好的组件、库,叫做轮子。因为它可以拿来直接用,直接塞进我们的项目中,就能实现对应的功能。 有些同学会问,人家都已经做好了,你再来重新弄一遍,有什么意义?这不是在浪费时间吗。 殊不知,造轮子是一种学习方式,能快速进步,造得好,是自己超强能力的表...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
立即提问