java中PostMethod和HttpPost都可以提交post表单,请问他们有什么区别

PostMethod
HttpPost 尤其是在cookie和保存信息方面有什么不同?求大神解释
我抛砖引玉,上代码!

import java.io.BufferedReader;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class Byrbt {

/**
 * @param args
 * @throws Exception 
 */
public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    //先下载登陆页面
    URL login=new URL("http://bt.byr.cn/login.php");

    InputStreamReader isr=new InputStreamReader(login.openStream(),"utf-8");

    BufferedReader br=new BufferedReader(isr);

    String line="";

    String html="";

    while((line=br.readLine())!=null){
        //html=html+line+"\n";
        html+=line;
    }

    Document doc=Jsoup.parse(html);

    //找到图片,下载图片

    String imgSrc="";

    imgSrc=doc.body().getElementsByAttribute("method").select("tr").select("img").attr("src").toString();

    String realSrc="http://bt.byr.cn/"+imgSrc;

    System.out.println(realSrc);

    getPhotoFromWeb(realSrc);

    String imgString="";
    String imgHash="";

    imgHash=realSrc.split("imagehash=")[1];

    System.out.println("输入d盘里的验证码");
    Scanner sca =new Scanner(System.in);

    imgString=sca.next();

    //登陆

    HttpClient httpClient=new HttpClient();

    httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);

    PostMethod post = new PostMethod("http://bt.byr.cn/login.php");
    post.setRequestHeader(new Header(
                    "User-Agent",
                    "Mozilla/5.0 /Windows; U; Windows NT 4.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.0"));
    post.addParameter("username", "wingrove");
    post.addParameter("password","jiao12" );
    post.addParameter("imagestring",imgString);
    post.addParameter("imagehash",imgHash);


    httpClient.executeMethod(post);

    System.out.println("GET POST STATUS: "+ post.getStatusLine().toString());

// GetMethod get = new GetMethod("http://bt.byr.cn/torrents.php?cat=406");
// get.setRequestHeader(new Header(
// "User-Agent",
// "Mozilla/5.0 /Windows; U; Windows NT 4.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.0"));

// httpClient.executeMethod(get);
//

isr=new InputStreamReader(post.getResponseBodyAsStream(),"utf-8");

    br=new BufferedReader(isr);

    line="";
    html="";

    while((line=br.readLine())!=null){
        html=html+line+"\n";
    }

    System.out.println(html);

}
public static void getPhotoFromWeb(String urlString) throws MalformedURLException, Exception{
    //这个程序只适用于网络,不适用于本地可能是由于url的局限

    URL url = new URL(urlString);
    File outFile =new File("d:/CAPTCHA.jpg");
    OutputStream os = new FileOutputStream(outFile);
    InputStream is = url.openStream();
    byte[] buff = new byte[1024];
    while(true) {
        int readed = is.read(buff);
        if(readed == -1) {
            break;
        }
        byte[] temp = new byte[readed];
        System.arraycopy(buff, 0, temp, 0, readed);
        os.write(temp);
    }
    is.close(); 
    os.close();

}

}

private void doPost(String url, Map<String, String> headers, String body) throws IOException {

02 HttpPost post = new HttpPost(url);
03 for (Map.Entry header : headers.entrySet()) {
04 post.setHeader(header.getKey(), header.getValue());
05 }
06 post.setEntity(new StringEntity(body));
07 HttpContext context = createBasicAuthContext("admin", "password");
08 CloseableHttpResponse response = client.execute(host, post, context);
09 try {
10 // status = response.getStatusLine().getStatusCode();
11 // headers = response.getAllHeaders();
12

13 // HttpEntity entity = response.getEntity();
14 // text = IOUtils.toString(entity.getContent(), "ISO-8859-1");
15 } finally {
16 response.close();
17 }
18 }

1个回答

比如你有一个页面index.html,这个页面有一个文本域,名称是:a,值是123,你用get提交后,你的url会变成:index.html?a=123,在获取的时候,就是从浏览器中回去参数了,而不是表单!
由于是这样,get方式提交表单,参数有限,不能提交大量数据,而且安全性不高!
用post方式提交,就不会使用url传参数,而且数据量几乎没有限制,这样可以提交大量的数据,安全性可靠!(拾人牙慧)

qq_16614435
qq_16614435 北邮人~
3 年多之前 回复
wingrove
wingrove 谢谢您
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JAVA POST登录异常问题?
网上找的HTTP登录代码,登录后返回能200,但是不用用户名密码也返回200,且用Cookie[] cookies = httpClient.getState().getCookies(); StringBuffer tmpcookies = new StringBuffer(); for (Cookie c : cookies) { tmpcookies.append(c.toString() + ";"); System.out.println("cookies = "+c.toString()); } 能取到Cookies,这个搞不懂 登录成功后跳到另一个网页,但是用System.out.println("ResponseBody:\n" + stringBuffer.toString());返回如下: ``` <html> <head><title></title> <SCRIPT LANGUAGE="JavaScript"> var currentWindow = window; if(currentWindow != null){ currentWindow.top.location = "/NMMP/jsp/login.jsp"; } </SCRIPT> </head> ``` 感觉跳转时少了东西,所以跳转后的网页不对,请各们大神帮分析下,或者给个思路,本人不是搞程序的,只是想做一个来应对自己的重复工作,完整代码如下:本人无C币,如果有兴趣帮我做可商量 ``` import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; /** * * @ClassName: HttpLogin * @Description: java通过httpclient获取cookie模拟登录 * @author zeze * @date 2015年11月10日 下午4:18:08 * */ public class HttpLogin { public static void main(String[] args) { // 登陆 Url String loginUrl = "http://10.154.13.82:7011/NMMP/jsp/login.jsp"; // 需登陆后访问的 Url String dataUrl = "http://10.154.13.82:7011/NMMP/wyMainAction!init.ilf"; //http://10.154.13.82:7011/NMMP//jsp/wyService/mytasklist.jsp HttpClient httpClient = new HttpClient(); // 模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式 PostMethod postMethod = new PostMethod(loginUrl); // 设置登陆时要求的信息,用户名和密码 NameValuePair[] data = { new NameValuePair("useraccount", ""), new NameValuePair("password", "Hn_yd45") }; postMethod.setRequestBody(data); try { // 设置 HttpClient 接收 Cookie,用与浏览器一样的策略 httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); int statusCode=httpClient.executeMethod(postMethod); // 获得登陆后的 Cookie Cookie[] cookies = httpClient.getState().getCookies(); StringBuffer tmpcookies = new StringBuffer(); for (Cookie c : cookies) { tmpcookies.append(c.toString() + ";"); System.out.println("cookies = "+c.toString()); } System.out.println(statusCode); if(statusCode==200){//重定向到新的URL System.out.println("模拟登录成功"); // 进行登陆后的操作 GetMethod getMethod = new GetMethod(dataUrl); // 每次访问需授权的网址时需带上前面的 cookie 作为通行证 // getMethod.setRequestHeader("cookie", tmpcookies.toString()); // 你还可以通过 PostMethod/GetMethod 设置更多的请求后数据 // 例如,referer 从哪里来的,UA 像搜索引擎都会表名自己是谁,无良搜索引擎除外 // postMethod.setRequestHeader("Referer", "http://passport.mop.com/"); getMethod.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); getMethod.setRequestHeader("Referer","http://10.154.13.82:7011/NMMP/login.ilf"); getMethod.setRequestHeader("Accept-Encoding","gzip, deflate"); getMethod.setRequestHeader("Accept-Language","zh-CN,zh;q=0.9"); getMethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" ); httpClient.executeMethod(getMethod); statusCode=httpClient.executeMethod(getMethod); System.out.println("模拟登录成功"+statusCode); // 打印出返回数据,检验一下是否成功 // String text = getMethod.getResponseBodyAsString(); InputStream inputStream = getMethod.getResponseBodyAsStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); StringBuffer stringBuffer = new StringBuffer(); String str= ""; while((str = br.readLine()) != null){ stringBuffer .append(str ); } System.out.println("ResponseBody:\n" + stringBuffer.toString()); HttpRequestProxy hrp = new HttpRequestProxy(); Map date = new HashMap(); date.put("jyidApplet", "1"); date.put("codeNumApplet", "1"); date.put("jymxIdApplet", "447"); date.put("patientIdApplet", "1118"); String str1 = hrp.doRequest(dataUrl,date, null, null); System.out.println("sd"+str1); } else { System.out.println("登录失败"); } } catch (Exception e) { e.printStackTrace(); } } } ``` 登录网页源码如下: ``` <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>综合管理系统</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <style type="text/css"> *{ margin:auto; } html,body{ overflow:hidden; width:100%; height:100%; margin:auto; } body{ background:url(/NMMP/common-skins/maintain/images/login_bg_1.0.gif); } #login_panel{ background-image:url(/NMMP/common-skins/maintain/images/login_panel_bg_1.0.png); background-repeat:repeat-x; height:640px; width:100%; text-align:center; position:relative; } #login_input{ background-image:url(/NMMP/common-skins/maintain/images/login_input_1.0.png); background-repeat:no-repeat; width:668px; height:403px; position:relative; } #useraccount{ border:none; position:absolute; left:392px; top:149px; height:24px; width:136px; background-color:#99deff; } #password{ border:none; position:absolute; left:392px; top:183px; height:24px; width:136px; background-color:#99deff; } #login_botton{ position:absolute; left:537px; _left:538px; top:147px; } #message{ position:absolute; left:348px; top:218px; color:#F00; font-size:14px; font-weight:bold; } #technical{ position:absolute; left:375px; top:258px; text-align:left; color:#CCC; font-size:12px; line-height:30px; } #copyright{ position:absolute; bottom:65px; right:0px; color:#CCC; font-size:12px; text-align:right; line-height:20px; } </style> <!--[if IE 6]> <script language="javascript" type="text/javascript" src="/NMMP/common-skins/default/jslib/DD_belatedPNG.js"> </script> <script language="javascript" type="text/javascript"> DD_belatedPNG.fix('#login_panel'); DD_belatedPNG.fix('#login_input'); </script> <![endif]--> </head> <body windowc_onresizez="true"> <div id="login_panel"> <div id="login_input" style="top: 110.5px;"> <form name="form1" action="/NMMP/CtrlUser.action?action=login&amp;surl=jsp/home/main.jsp&amp;furl=jsp/login.jsp" method="post" 360chrome_form_autofill="2"> <input name="useraccount" id="useraccount" style="background-color: rgb(250, 255, 189);" required="true" type="text"> <input name="password" id="password" style="background-color: rgb(250, 255, 189);" required="true" type="password"> <input id="login_botton" type="image" src="/NMMP/common-skins/maintain/images/login_botton.png"> <div id="message"> </div> <!-- div id="technical"><a style="color:orange" href="javascript:void(0)" onclick="resetpwd();">密码重置</a></div--> <div id="copyright">版权所有:</div> </form> </div> </div> <script language="javascript" type="text/javascript"> document.getElementById("login_input").style.top=(document.body.clientHeight-403)/2+"px"; function resetpwd(){ var url = "/NMMP/resetpwdAction.ilf"; window.location.href=url; } </script> </body></html> ```
MultipartRequestEntity post 请求发送。接收端用java httpserver httpexchange 接受。能不能单独取出 request sign 两块内容
package com.test.HttpClient; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.StringRequestEntity; import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; import org.apache.commons.httpclient.methods.multipart.Part; import org.apache.commons.httpclient.methods.multipart.StringPart; import org.apache.commons.httpclient.params.HttpConnectionManagerParams; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StreamUtils; /** * Hello world! * */ public class HttpClientApp { private static final Logger logger = LoggerFactory.getLogger(HttpClientApp.class); public static void main( String[] args ) { String url="http://127.0.0.1:8081/SpringMvc1/student"; String reqStr="aaaaaaa"; String contentType="application/json"; String charset="UTF-8"; String ss=doPost( url, reqStr, contentType, charset) ; System.out.println("返回内容为1:" +ss); Part[] parts=new Part[2]; parts[0]=new StringPart("request", "请求报文体",charset); parts[1]=new StringPart("sign", "数字签名",charset); url="http://127.0.0.1:8081/SpringMvc1/BossServlet"; // url="http://127.0.0.1:8081/SpringMvc1/fileupload"; String response=doPostMuStr( url, parts) ; System.out.println("返回内容为1:" +response); } /** * 执行一个HTTP POST请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param reqStr 请求的查询参数,可以为null * @param charset 字符集 * @return 返回请求响应的HTML */ public static String doPost(String url, String reqStr, String contentType, String charset) { HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); try { HttpConnectionManagerParams managerParams = client.getHttpConnectionManager().getParams(); managerParams.setConnectionTimeout(30000); // 设置连接超时时间(单位毫秒) managerParams.setSoTimeout(30000); // 设置读数据超时时间(单位毫秒) method.setRequestEntity(new StringRequestEntity(reqStr, contentType, "utf-8")); client.executeMethod(method); System.out.println("返回的状态码为:" +method.getStatusCode()); if (method.getStatusCode() == HttpStatus.SC_OK) { // return StreamUtils.copyToString(method.getResponseBodyAsStream(), Charset.forName(charset)); return IOUtils.toString(method.getResponseBodyAsStream(),"utf-8"); } } catch (UnsupportedEncodingException e1) { logger.error(e1.getMessage()); return ""; } catch (IOException e) { logger.error("执行HTTP Post请求" + url + "时,发生异常!" + e.toString()); return ""; } finally { method.releaseConnection(); } return null; } /** * 执行一个HTTP POST请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param reqStr 请求的查询参数,可以为null * @param charset 字符集 * @return 返回请求响应的HTML */ public static String doPostMuStr(String url, Part[] reqStr) { HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); try { HttpConnectionManagerParams managerParams = client.getHttpConnectionManager().getParams(); managerParams.setConnectionTimeout(30000); // 设置连接超时时间(单位毫秒) managerParams.setSoTimeout(30000); // 设置读数据超时时间(单位毫秒) method.setRequestEntity(new MultipartRequestEntity(reqStr, method.getParams())); // method.setContentChunked(true); client.executeMethod(method); System.out.println("返回的状态码为:" +method.getStatusCode()); if (method.getStatusCode() == HttpStatus.SC_OK) { return IOUtils.toString(method.getResponseBodyAsStream(),"utf-8"); } } catch (UnsupportedEncodingException e1) { logger.error(e1.getMessage()); return ""; } catch (IOException e) { logger.error("执行HTTP Post请求" + url + "时,发生异常!" + e.toString()); return ""; } finally { method.releaseConnection(); } return null; } }
测试报错,Connection refused: connect,求解?
代码: ``` public class ItfTest { /** * @param args */ public static void main(String[] args) { try { String out = testbiz(); System.out.println(out); } catch (IOException e) { e.printStackTrace(); } } public static String testbiz() throws HttpException, IOException { HttpClient httpClient = new HttpClient(); PostMethod post = new PostMethod( "http://localhost:8001/itf/OI_AddSaleByParameter"); // PostMethod post = new PostMethod( "https://rryx.sinovatech.com/itf/OI_QueryEShopOrder"); post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); String key = "123321abc"; String channel="ch_shenxun"; Map<String, Object> req = new HashMap<>(); String instr ="{\"body\": \"{\\\"startTime\\\":\\\"2019-01-01 14:43:19\\\",\\\"endTime\\\":\\\"2019-01-12 15:14:42\\\",\\\"phone\\\":\\\"18309858042\\\"}\",\"head\": {} }"; /* String instr ="6351"; req.put("loginCode",instr);*/ Map<String, Object> header = new HashMap<>(); header.put("appId", channel); header.put("tid", UUID.randomUUID().toString()); header.put("timestamp", System.currentTimeMillis()); header.put("ver", "1.0"); Map<String, Object> reMap = new HashMap<>(); reMap.put("header", header); reMap.put("req", req); req.put("saleName","123"); req.put("goodIds","ff8080815e562c4d015e6103956700b6"); req.put("orderValue","1"); req.put("createName","管理员"); System.out.println(JSONObject.toJSON(reMap)); String reqdata = JSONObject.toJSONString(reMap); String sign = DigestUtils.md5Hex(reqdata + key); NameValuePair[] param = { new NameValuePair("sign", sign), new NameValuePair("reqdata", reqdata) }; post.setRequestBody(param); int result = httpClient.executeMethod(post); System.out.println("返回结果=" + result); InputStream in = post.getResponseBodyAsStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder sb = new StringBuilder(); String line = reader.readLine(); while (line != null) { sb.append(line); line = reader.readLine(); } reader.close(); return sb.toString(); } } //以上代码传参测试,但是运行后报错 java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at java.net.Socket.connect(Socket.java:538) at java.net.Socket.<init>(Socket.java:434) at java.net.Socket.<init>(Socket.java:286) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:122) at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) at com.sinovatech.test.ItfTest.testbiz(ItfTest.java:95) at com.sinovatech.test.ItfTest.main(ItfTest.java:52) 求大神指点 ```
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查询。左边的条件没有传过去,也就是分类信息没有传过去,分类信息是必须要有的。 这位大哥,谢谢了。。我知道分类信息,现在就是不知道怎么加这个分类信息,你能帮我看看吗?
HttpClient的循环发送请求,第一次成功,为什么第二次就Read timed out?
public String audits() throws Exception{ init(); /*String ids = "[" + condition.getIds() + "]"; String param="{" + "logId" + ":" + ids + "}";*/ String url = "http://192.168.1.220:8080/servlet/AuditServlet";//测试 PostMethod method = new PostMethod(url); HttpClient httpClient = new HttpClient(); //HttpClient httpClient = new HttpClient(new HttpClientParams(),new SimpleHttpConnectionManager(true)); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(600000); httpClient.getHttpConnectionManager().getParams().setSoTimeout(600000); try { int maxList = 5000; int lastIndex = maxList; Integer allTotal = 0; Integer allFaild = 0; Integer allSuccess = 0; List<String> lists = java.util.Arrays.asList(condition.getIds().split(",")); int count = lists.size(); List<List<String>> idList = new ArrayList<>(); for (int index = 0; index < count; ) { if (lastIndex >= count) { lastIndex = count; idList.add(lists.subList(index, lastIndex)); break; } else { idList.add(lists.subList(index, lastIndex)); index = lastIndex; // 设置下一批下标 lastIndex = index + (maxList - 1); } } if (CollectionUtils.isNotEmpty(idList)) { for (List<String> subList : idList) { String params="{" + "logId" + ":" + subList + "}"; System.out.println("请求接口参数:" + params); //循环发送请求 RequestEntity entity = new StringRequestEntity(params,"application/json","GBK"); System.out.println(1); method.setRequestEntity(entity); System.out.println(2); httpClient.executeMethod(method); System.out.println("请求接口路径url:" + method.getURI().toString()); System.out.println(3); InputStream in = method.getResponseBodyAsStream(); //下面将stream转换为String StringBuffer sb = new StringBuffer(); InputStreamReader isr = new InputStreamReader(in, "GBK"); char[] b = new char[4096]; for(int n; (n = isr.read(b)) != -1;) { sb.append(new String(b, 0, n)); } String returnStr = sb.toString(); System.out.println("返回接口参数:" + returnStr); JSONObject jasonObject = JSONObject.fromObject(returnStr); Map map = (Map)jasonObject; Object total = map.get("total"); Object faild = map.get("faild"); Object success = map.get("success"); allTotal = allTotal + Integer.valueOf(total.toString()); allFaild = allFaild + Integer.valueOf(faild.toString()); allSuccess = allSuccess + Integer.valueOf(success.toString()); } } String totals = allTotal.toString(); String failds = allFaild.toString(); String successs = allSuccess.toString(); condition.setTotal(totals); condition.setFaild(failds); condition.setSuccess(successs); return "index"; } catch (Exception e) { e.printStackTrace(); throw e; } finally { method.releaseConnection(); } } 第一次返回显示是成功的![图片说明](https://img-ask.csdn.net/upload/201912/25/1577256421_630516.png) 第二次就![图片说明](https://img-ask.csdn.net/upload/201912/25/1577256497_930744.png)
java使用httpclient向百度的收录入口提交URL报 403错误
package com.galaxy.promotion.baidu; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; public class Test { public static void main(String[] args) throws HttpException, IOException { HttpClient httpclient = new HttpClient(); // 创建post方法实例 PostMethod postMethod = new PostMethod("http://zhanzhang.baidu.com/linksubmit/urlsubmit"); // 填入各个表单域的值 NameValuePair[] data = { new NameValuePair("url", "www.example.com") }; // 将表单的值放入到post方法中 postMethod.setRequestBody(data); // 执行post方法 int statusCode = httpclient.executeMethod(postMethod); System.out.println(statusCode); System.out.println(postMethod.getStatusLine()); } }
HttpClient的Post请求失败(form表单参数包含中文)
我最近在使用HttpClient通过Post方式发送form表单提交请求,但是,在使用NameValuePair[] 拼写form提交参数的时候,有一些参数名包含了中文。我在测试时候发现,如果参数名中不包含中文,则该参数的值能够成功请求过去。但是,如果参数中包含中文,则请求参数值传递后不成功。 我当时,对参数名称进行了编码集的修改,但是,无任何效果。Post请求传递的是字节流,应该和编码集无关,所以一时想不出到底是哪里除了问题,请各位大侠帮帮忙!谢谢! 以下是我的代码片段: ``` HttpClient client = new HttpClient(); // 从会话中取出cookie信息并设置到client对象中 client.getState().addCookies(cookie); // 创建GetMethod用于获取所有咨询列表信息 String url="http://A.."; PostMethod listPost = new PostMethod(url); // 拼写参数 NameValuePair[] body = new NameValuePair[] { new NameValuePair("ctl00产品性质","01-high"), new NameValuePair("ctl00product_name","product01" )}; Part[] parts=new Part[ body.length]; for (int i = 0; i < body.length; i++) { parts[i]=new StringPart(body[i].getName(), StringUtils.isNotBlank(body[i].getValue())?body[i].getValue():"","UTF-8"); } listPost.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"UTF-8"); listPost.setRequestEntity(new MultipartRequestEntity(parts,listPost.getParams())); listPost.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*"); client.executeMethod(listPost); String reString = listPost.getResponseBodyAsString(); System.out.println(reString); if (listPost.getStatusCode() == 200) { return true; } ```
java模拟表单 json数据格式问题,大神请进
String url = "http://120.25.102.84:8000/creditAudit"; PostMethod postMethod = new PostMethod(url); // 填入各个表单域的值 NameValuePair[] data = { new NameValuePair("message", JSON.toJSONString(ll))}; System.out.println("推送成功"); // 将表单的值放入postMethod中 commons-httpclient.jar postMethod.setRequestBody(data); postMethod.getParams().setContentCharset("utf-8"); postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8"); // 执行postMethod int statusCode = 0; try { statusCode = new HttpClient().executeMethod(postMethod); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发 // 301或者302 if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) { // 从头中取出转向的地址 Header locationHeader = postMethod.getResponseHeader("location"); String location = null; if (locationHeader != null) { location = locationHeader.getValue(); System.out.println("diandianLogin:" + location); } else { System.err.println("Location field value is null."); } return; } else { System.out.println(postMethod.getStatusLine()); String str = ""; try { str = postMethod.getResponseBodyAsString(); } catch (IOException e) { e.printStackTrace(); } System.out.println(str); } postMethod.releaseConnection(); return; new NameValuePair("message", JSON.toJSONString(ll))}; messages是个list 但是转成json 但是 格式如下 [name=message, value=[{"BAL":"5273.84","BILLDTLS_ID":"AazLIsjsMYnlKYirmNOx","LOANID":"NJGL20160428002","PRERETUAMT":"3052.40"}]] 单我想 修改格式为: [{"BAL":"5273.84","BILLDTLS_ID":"AazLIsjsMYnlKYirmNOx","LOANID":"NJGL20160428002","PRERETUAMT":"3052.40"}] 请问如何修改,大神勿喷
用Java来抓取网页实例中HttpClient类的问题
报这么一大堆错误我也是受不了了...... 主要的问题应该是HttpClient类这个东西,在网上查了这个类是httpclient-2.x.jar包的产物,我导入的是httpclient-4.2.2.jar和httpcore-4.2.2.jar包,而这两个新的工具包并不包含HttpClient类,查阅了Java API帮助文档后,自己并没有找到HttpClient类的替代类,而是一堆接口和抽象类,由于是刚开始写这个,所以有点懵。 所以求助大神么,这个应该怎么处理,如果是可以替换,用哪个类或者接口呢? ![图片说明](https://img-ask.csdn.net/upload/201604/17/1460872116_198392.jpg) ![图片说明](https://img-ask.csdn.net/upload/201604/17/1460872159_847677.jpg) ![图片说明](https://img-ask.csdn.net/upload/201604/17/1460872175_664664.jpg) ![图片说明](https://img-ask.csdn.net/upload/201604/17/1460872188_27671.jpg) 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(); } } } ``` ```
java爬虫求助,为什么报异常了,怎么解决
package org; 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(); } } } 下面是异常 八月 27, 2016 4:16:28 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 信息: I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect 八月 27, 2016 4:16:28 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 信息: Retrying request 八月 27, 2016 4:16:49 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 信息: I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect 八月 27, 2016 4:16:49 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 信息: Retrying request 八月 27, 2016 4:17:10 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 信息: I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect 八月 27, 2016 4:17:10 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry 信息: Retrying request java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:79) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:121) at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324) at org.RetrivePage.downloadPage(RetrivePage.java:37) at org.RetrivePage.main(RetrivePage.java:82)
关于postmethod里 requestentity parameter的问题
在使用postmethod时,当设置了requentity时,先前设置的parameter会被清空,反过来也一样。 到底是为什么?
httpclient 发送post请求(https),请求体为xml的字符串类型,获取不到数据
![图片说明](https://img-ask.csdn.net/upload/201607/15/1468574841_890886.png) 用fiddler发送请求可以获取到参数,但是用httpclient返回500;求解答 (下面是我的部分代码) ProtocolSocketFactory fcty = new MySecureProtocolSocketFactory(); Protocol.registerProtocol("https", new Protocol("https", fcty, 443)); String response = null; HttpClient client = new HttpClient(); PostMethod postMethod = new PostMethod(url); postMethod.getParams().setParameter( HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); // 设置Post数据 if (!params.isEmpty()) { String data = "<?xml version=\"1.0\" encoding=\"utf-8\"?><EntityPreMethod><Method>" + params.get("Method") + "</Method><Parameters>" + params.get("Parameters") + "</Parameters><AccessId>******</AccessId></EntityPreMethod>"; System.out.println(data); postMethod.setRequestEntity(new StringRequestEntity(data, "text/xml", "gbk")); postMethod.addRequestHeader("Authorization", "Bearer " + this.getAccessToken()); postMethod.setRequestHeader("Content-Type", "text/xml"); } try { int statusCode = client.executeMethod(postMethod); System.out.println(statusCode); if (statusCode == HttpStatus.SC_OK) { response = postMethod.getResponseBodyAsString();
Java实现短信验证码发送功能
项目结构如图所示: ![图片说明](https://img-ask.csdn.net/upload/201608/03/1470231448_507503.png) 1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法 /** * 文件说明 * @Description:扩展说明 * @Copyright: 2015 dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */ package com.demo.util; import java.io.IOException; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.SimpleHttpConnectionManager; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.*; /** * @Author: feizi * @Date: 2015年4月17日 上午9:26:34 * @ModifyUser: feizi * @ModifyDate: 2015年4月17日 上午9:26:34 * @Version:V6.0 */ public class HttpRequestUtil { /** * HttpClient 模拟POST请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:15:59 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:15:59 */ public static String postRequest(String url, Map<String, String> params) { //构造HttpClient的实例 HttpClient httpClient = new HttpClient(); //创建POST方法的实例 PostMethod postMethod = new PostMethod(url); //设置请求头信息 postMethod.setRequestHeader("Connection", "close"); //添加参数 for (Map.Entry<String, String> entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()); } //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); //接收处理结果 String result = null; try { //执行Http Post请求 httpClient.executeMethod(postMethod); //返回处理结果 result = postMethod.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 postMethod.releaseConnection(); //关闭HttpClient实例 if (httpClient != null) { ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; } } return result; } /** * HttpClient 模拟GET请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:15:28 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:15:28 */ public static String getRequest(String url, Map<String, String> params) { //构造HttpClient实例 HttpClient client = new HttpClient(); //拼接参数 String paramStr = ""; for (String key : params.keySet()) { paramStr = paramStr + "&" + key + "=" + params.get(key); } paramStr = paramStr.substring(1); //创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + paramStr); //接收返回结果 String result = null; try { //执行HTTP GET方法请求 client.executeMethod(method); //返回处理结果 result = method.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 method.releaseConnection(); //关闭HttpClient实例 if (client != null) { ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; } } return result; } } 2、再创建一个类,生成验证码,然后传递相应的参数 /** * 文件说明 * @Description:扩展说明 * @Copyright: 2015 dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */ package com.demo.util; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; /** * @Author: feizi * @Date: 2015年4月17日 上午9:24:48 * @ModifyUser: feizi * @ModifyDate: 2015年4月17日 上午9:24:48 * @Version:V6.0 */ public class SendMsgUtil { /** * 发送短信消息 * 方法说明 * @Discription:扩展说明 * @param phones * @param content * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:18:08 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址 String url = "短信接口URL提交地址"; Map<String, String> params = new HashMap<String, String>(); params.put("zh", "用户账号"); params.put("mm", "用户密码"); params.put("dxlbid", "短信类别编号"); params.put("extno", "扩展编号"); //手机号码,多个号码使用英文逗号进行分割 params.put("hm", phones); //将短信内容进行URLEncoder编码 params.put("nr", URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); } /** * 随机生成6位随机验证码 * 方法说明 * @Discription:扩展说明 * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:19:02 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode(){ //验证码 String vcode = ""; for (int i = 0; i < 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; } /** * 测试 * 方法说明 * @Discription:扩展说明 * @param args * @return void * @Author: feizi * @Date: 2015年4月17日 下午7:26:36 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:26:36 */ public static void main(String[] args) { // System.out.println(SendMsgUtil.createRandomVcode()); // System.out.println("&ecb=12".substring(1)); System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询400-069-2886(客服电话)【XXX中心】")); } } 现在是HttpRequestUtil中报如下错误: 1: ![图片说明](https://img-ask.csdn.net/upload/201608/03/1470231822_151094.png) The method getParams() is undefined for the type HttpClient 2: ![图片说明](https://img-ask.csdn.net/upload/201608/03/1470231935_248782.png) The method shutdown() is undefined for the type SimpleHttpConnectionManager
<自己动手写网络爬虫>时遇到的报错
package com.guet.crawlerbyself; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; public class RetrivePage { private static HttpClient httpClient = new HttpClient(); //set a proxy server static { //set IP Address and the port of the proxy server httpClient.getHostConfiguration().setProxy("localhost",8080); } public static boolean downloadPage(String path) throws HttpException, IOException { InputStream input = null; OutputStream output = null; //get post method PostMethod postMethod = new PostMethod("www.baidu.com"); //set parameters of post method NameValuePair[] postData = new NameValuePair[2]; postData[0] = new NameValuePair("name","baidu"); postData[1] = new NameValuePair("password","123"); //Adds an array of parameters to be used in the POST request body. postMethod.addParameters(postData); //execute and return status code. int statusCode = httpClient.executeMethod(postMethod); //this place,only process the status 200. if(statusCode == HttpStatus.SC_OK) { input = postMethod.getResponseBodyAsStream(); String filename = path.substring(path.lastIndexOf('/')+1); output = new FileOutputStream(filename); //output to the file int tempByte = -1; while((tempByte = input.read())>0){ output.write(tempByte); } if (input != null ){ input.close(); } if(output != null){ output.close(); } return true; } return false; } public static void main(String[] args) { System.out.println("execute"); try{ RetrivePage.downloadPage("http://www.baidu.com/"); }catch(HttpException e){ System.out.println("httpexeption"); e.printStackTrace(); }catch(IOException e){ System.out.println("ioexeption"); e.printStackTrace(); } } } 运行时弹出对话框显示:could not find the main class. program will exit console中显示: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66) at com.guet.crawlerbyself.RetrivePage.<clinit>(RetrivePage.java:17) Exception in thread "main" 所需的apache的开源包我已经导入了,代码写完后也没报错,运行的时候就报错了. 我在网上google了一下,有的说把jdk改成1.4的之类的答案,我试过了,还是老问题没什么效果.希望之前碰到这个问题的朋友帮忙解答一下.
新浪微博java开发自动获取code
根据网上提供的相关代码自动获取code时,返回状态并不是302,而是200,应该是没发生跳转: List<Header> headers = new ArrayList<Header>(); headers.add(new Header("Referer", "https://api.weibo.com/oauth2/authorize?client_id=" + clientId + "&redirect_uri=" + redirectURI + "&response_type=code")); headers.add(new Header("Host", "login.sina.com.cn")); headers.add(new Header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0")); HttpClient client = new HttpClient(); client.getHostConfiguration().getParams().setParameter("http.default-headers", headers); client.executeMethod(postMethod); int status = postMethod.getStatusCode(); System.out.println(status); if (status != 302) { System.out.println("token刷新失败"); return null; } 根据网上部分人的解释,是有一个新的参数,ticket没有提交过去,请问有没有人解决了,谢谢大家的帮助。
在httpclient中使用Serializable接口报错
public static void main(String[] args) throws IOException, ClassNotFoundException { String url = "http://localhost:8080/RmiJetty/test"; Scanner sc1 = new Scanner(System.in); String queryString1 = "num1 = 1"; String queryString2 = "num2 = 1"; String inputObj = sc1.next(); Serializable s = getObjFromServer(url, queryString1,queryString2, inputObj); System.out.println(s.toString()); } /** * @param url * @param queryString 类似a=b&c=d 形式的参数 * * @param inputObj 发送到服务器的对象。 * * @return 服务器返回到客户端的对象。 * @throws IOException */ public static Serializable getObjFromServer(String url, String queryString1,String queryString2,Serializable inputObj) throws IOException { HttpClient client = new HttpClient(); PostMethod post = new PostMethod(url); post.setQueryString(queryString1); post.setQueryString(queryString2); post.setRequestHeader("Content-Type", "application/octet-stream"); java.io.ByteArrayOutputStream bOut = new java.io.ByteArrayOutputStream(1024); java.io.ByteArrayInputStream bInput = null; java.io.ObjectOutputStream out = null; Serializable returnObj = null; try { out = new java.io.ObjectOutputStream(bOut); out.writeObject(inputObj); out.flush(); out.close(); out = null; bInput = new java.io.ByteArrayInputStream(bOut.toByteArray()); RequestEntity re = new InputStreamRequestEntity(bInput); post.setRequestEntity(re); client.executeMethod(post); java.io.InputStream in = post.getResponseBodyAsStream(); java.io.ObjectInputStream oInput = new java.io.ObjectInputStream(in); returnObj = (Serializable) oInput.readObject(); oInput.close(); oInput = null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (out != null) { out.close(); out = null; } if (bInput != null) { bInput.close(); bInput = null; } //释放连接 post.releaseConnection(); } return returnObj; } 下面是servlet: public class servlet1 extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String strnum1 = request.getParameter("num1"); String strnum2 = request.getParameter("num2"); //String strnum3 = request.getParameter("inputObj"); java.io.ObjectInputStream oi = null; java.io.ObjectOutputStream ot = null; String url="rmi://127.0.0.1/Hello"; //hello表示为一个token,类似秘钥 try { NumServer server = (NumServer)Naming.lookup(url); oi = new java.io.ObjectInputStream(request.getInputStream()); Object o = oi.readObject(); oi.close(); oi = null; //int result = Integer.parseInt(strnum1) + Integer.parseInt(o.toString()); int a = Integer.parseInt(strnum1); int b = Integer.parseInt(strnum2); int result = server.num(a,b,o.toString()); ot = new java.io.ObjectOutputStream(response.getOutputStream()); ot.writeObject(result); ot.flush(); ot.close(); ot = null; PrintWriter pw = response.getWriter(); pw.println(result); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotBoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (oi != null) { oi.close(); oi = null; } if (ot != null) { ot.close(); ot = null; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } 这是报的错: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at RmiClient.HttpClientTest1.getObjFromServer(HttpClientTest1.java:79) at RmiClient.HttpClientTest1.main(HttpClientTest1.java:31) Exception in thread "main" java.lang.NullPointerException at RmiClient.HttpClientTest1.main(HttpClientTest1.java:33) 求大神帮忙啊
Jemter测试,传输byte数据到服务器问题
``` public static HttpResult doJsonPost(String url, String json, String charset, boolean isGzip) throws UnsupportedEncodingException { HttpClient httpClient = new HttpClient(); PostMethod postMethod = new UTF8PostMethod(url); if (isGzip) { byte[] jsonByte = GZipUtils.compressToByte(json); ByteArrayInputStream in = new ByteArrayInputStream(jsonByte); postMethod.setRequestEntity(new InputStreamRequestEntity(in)); } else { postMethod.setRequestEntity(new StringRequestEntity(json,"application/json; charset=utf-8",DEFAULT_CHARSET)); } String res = "fail"; HttpResult hr = new HttpResult(); // 默认404 int code = 404; try { httpClient.executeMethod(postMethod); // 获取二进制的byte流 if (StringUtils.isBlank(charset)) { charset = DEFAULT_CHARSET; } code = postMethod.getStatusCode(); res = read(postMethod.getResponseBodyAsStream(), charset); } catch (Exception e) { res = "fail"; throw new SystemException("HttpRequestUtil doJsonPost方法发送post请求失败", e); } finally { postMethod.releaseConnection(); } hr.setResponseCode(code); hr.setBody(res); return hr; } ``` 这段代码,用jemter怎么模拟
关于HttpClient的问题,如何使用HttpClient重定向?
``` /* * HttpRequestProxy.java * * Created on November 3, 2008, 9:53 AM */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.SimpleHttpConnectionManager; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; public class HttpRequestProxy { // 超时间隔 private static int connectTimeOut = 60000; // 让connectionmanager管理httpclientconnection时是否关闭连接 private static boolean alwaysClose = false; // 返回数据编码格式 private String encoding = "UTF-8"; private final HttpClient client = new HttpClient(); public HttpClient getHttpClient() { return client; } /** * 用法: HttpRequestProxy hrp = new HttpRequestProxy(); * hrp.doRequest("http://www.163.com",null,null,"gbk"); * * @param url * 请求的资源URL * @param postData * POST请求时form表单封装的数据 没有时传null * @param header * request请求时附带的头信息(header) 没有时传null * @param encoding * response返回的信息编码格式 没有时传null * @return response返回的文本数据 * @throws CustomException */ public String doRequest(String url, Map postData, Map header, String encoding) throws Exception { String responseString = null; // 头部请求信息 Header[] headers = null; if (header != null) { Set entrySet = header.entrySet(); int dataLength = entrySet.size(); headers = new Header[dataLength]; int i = 0; for (Iterator itor = entrySet.iterator(); itor.hasNext();) { Map.Entry entry = (Map.Entry) itor.next(); headers[i++] = new Header(entry.getKey().toString(), entry.getValue().toString()); } } // post方式 if (postData != null) { PostMethod postRequest = new PostMethod(url.trim()); if (headers != null) { for (int i = 0; i < headers.length; i++) { postRequest.setRequestHeader(headers[i]); } } Set entrySet = postData.entrySet(); int dataLength = entrySet.size(); NameValuePair[] params = new NameValuePair[dataLength]; int i = 0; for (Iterator itor = entrySet.iterator(); itor.hasNext();) { Map.Entry entry = (Map.Entry) itor.next(); params[i++] = new NameValuePair(entry.getKey().toString(), entry.getValue().toString()); } postRequest.setRequestBody(params); try { responseString = this.executeMethod(postRequest, encoding); } catch (Exception e) { throw e; } finally { postRequest.releaseConnection(); } } return responseString; } private String executeMethod(HttpMethod request, String encoding) throws Exception { String responseContent = null; InputStream responseStream = null; BufferedReader rd = null; try { this.getHttpClient().executeMethod(request); if (encoding != null) { responseStream = request.getResponseBodyAsStream(); rd = new BufferedReader(new InputStreamReader(responseStream, encoding)); String tempLine = rd.readLine(); StringBuffer tempStr = new StringBuffer(); String crlf = System.getProperty("line.separator"); while (tempLine != null) { tempStr.append(tempLine); tempStr.append(crlf); tempLine = rd.readLine(); } responseContent = tempStr.toString(); } else responseContent = request.getResponseBodyAsString(); Header locationHeader = request.getResponseHeader("location"); // 返回代码为302,301时,表示页面己经重定向,则重新请求location的url,这在 // 一些登录授权取cookie时很重要 if (locationHeader != null) { String redirectUrl = locationHeader.getValue(); this.doRequest(redirectUrl, null, null, null); } } catch (HttpException e) { throw new Exception(e.getMessage()); } catch (IOException e) { throw new Exception(e.getMessage()); } finally { if (rd != null) try { rd.close(); } catch (IOException e) { throw new Exception(e.getMessage()); } if (responseStream != null) try { responseStream.close(); } catch (IOException e) { throw new Exception(e.getMessage()); } } return responseContent; } /** * 特殊请求数据,这样的请求往往会出现redirect本身而出现递归死循环重定向 所以单独写成一个请求方法 * 比如现在请求的url为:http://localhost:8080/demo/index.jsp 返回代码为302 * 头部信息中location值为:http://localhost:8083/demo/index.jsp * 这时httpclient认为进入递归死循环重定向,抛出CircularRedirectException异常 * * @param url * @return * @throws CustomException */ public String doSpecialRequest(String url, int count, String encoding) throws Exception { String str = null; InputStream responseStream = null; BufferedReader rd = null; GetMethod getRequest = new GetMethod(url); // 关闭httpclient自动重定向动能 getRequest.setFollowRedirects(false); try { this.client.executeMethod(getRequest); Header header = getRequest.getResponseHeader("location"); if (header != null) { // 请求重定向后的URL,count同时加1 this.doSpecialRequest(header.getValue(), count + 1, encoding); } // 这里用count作为标志位,当count为0时才返回请求的URL文本, // 这样就可以忽略所有的递归重定向时返回文本流操作,提高性能 if (count == 0) { getRequest = new GetMethod(url); getRequest.setFollowRedirects(false); this.client.executeMethod(getRequest); responseStream = getRequest.getResponseBodyAsStream(); rd = new BufferedReader(new InputStreamReader(responseStream, encoding)); String tempLine = rd.readLine(); StringBuffer tempStr = new StringBuffer(); String crlf = System.getProperty("line.separator"); while (tempLine != null) { tempStr.append(tempLine); tempStr.append(crlf); tempLine = rd.readLine(); } str = tempStr.toString(); } } catch (HttpException e) { throw new Exception(e.getMessage()); } catch (IOException e) { throw new Exception(e.getMessage()); } finally { getRequest.releaseConnection(); if (rd != null) try { rd.close(); } catch (IOException e) { throw new Exception(e.getMessage()); } if (responseStream != null) try { responseStream.close(); } catch (IOException e) { throw new Exception(e.getMessage()); } } return str; } public static void main(String[] args) throws Exception { HttpRequestProxy hrp = new HttpRequestProxy(); Map date = new HashMap(); date.put("jyidApplet", "1"); date.put("codeNumApplet", "1"); date.put("jymxIdApplet", "447"); date.put("patientIdApplet", "1118"); String str = hrp.doRequest("http://127.0.0.1:8080/lis/mz/addTM",date, null, null); System.out.println(str); } } ```
request读取流的问题,大家一起讨论下
1 项目中碰到个问题,在过滤器中通过request.getParameterNames读取数据进行过滤后,发现在后续的servlet中通过getInputStream读取的时候读不到数据,百度后说是这两个方法有冲突,因为流只能够读取一遍,但是后来发现个问题,我将模拟客户端的代码修改下: 原来 //url=""; conn = (HttpURLConnection) objUrl.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); String xmlStr = "SSSSSSSS"; conn.setRequestProperty("Content-Length", String.valueOf(xmlStr.length())); //conn.connect(); DataOutputStream out2 = new DataOutputStream(conn .getOutputStream()); //out = conn.getOutputStream(); //out.write(xmlStr.getBytes()); out2.writeBytes(xmlStr); System.out.println("开始POST请求"); out2.flush(); System.out.println("结束POST请求"); out2.close(); 新的: //url=""; HttpClient httpClient = new HttpClient (); PostMethod httpost = new PostMethod(url); //设置参数 try{ System.out.println(param2()); RequestEntity entity = new StringRequestEntity("SDSDSDSD", "text/xml", "utf-8"); httpost.setRequestEntity(entity); httpClient.executeMethod(httpost); String result = httpost.getResponseBodyAsString(); System.out.println("结果"+result); }catch(Exception e){ e.printStackTrace(); } 发现新改了客户端请求后,代码能正常执行,不会出现上面说的过滤器读取后,servlet读取到空,然后我在servlet中使用getInputStream多次读取都能得到数据。求解
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
相关热词 c#处理浮点数 c# 生成字母数字随机数 c# 动态曲线 控件 c# oracle 开发 c#选择字体大小的控件 c# usb 批量传输 c#10进制转8进制 c#转base64 c# 科学计算 c#下拉列表获取串口
立即提问