读书人

自动往iteyeblog发帖原来可以现在

发布时间: 2012-11-05 09:35:12 作者: rapoo

自动往iteyeblog发帖,原来可以,现在怎么不好用了,贴出代码,请高手帮忙分析
开始的时候是好用的,一段时间后不能用了,不知道怎么回事,下面是开始好用时候的代码


package function.post;import java.io.UnsupportedEncodingException;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.CookieStore;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.client.params.CookiePolicy;import org.apache.http.client.params.HttpClientParams;import org.apache.http.client.protocol.ClientContext;import org.apache.http.impl.client.BasicCookieStore;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.BasicHttpContext;import org.apache.http.protocol.HttpContext;import org.apache.http.util.EntityUtils;public class IteyePost {public static void main(String args[]) throws Exception, Exception{IteyePost ia= new IteyePost();ia.send("题目2","内容内容内容内容内容内容内容");   //发帖方法}private void send(String titlett,String content) throws Exception {HttpClient httpclient = new DefaultHttpClient();  // 这一行必须要加,否则服务器无法获取登陆状态        HttpClientParams.setCookiePolicy(httpclient.getParams(),CookiePolicy.BROWSER_COMPATIBILITY);CookieStore cookieStore = new BasicCookieStore();        // Create local HTTP context        HttpContext localContext = new BasicHttpContext();        // Bind custom cookie store to the local context        localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);    HttpPost httppost=new HttpPost("http://www.iteye.com/login");//创建参数列队List<NameValuePair> formparams=new ArrayList<NameValuePair>();formparams.add(new BasicNameValuePair("name","**********"));formparams.add(new BasicNameValuePair("password","********"));formparams.add(new BasicNameValuePair("button","登 录"));UrlEncodedFormEntity uefEntity;uefEntity= new UrlEncodedFormEntity(formparams,"UTF-8");httppost.setEntity(uefEntity);HttpResponse  response= httpclient.execute(httppost,localContext);int statusCode; statusCode=response.getStatusLine().getStatusCode();System.out.println(response.getStatusLine()); httppost.abort();              //post 连接关闭,关了一个才能连下一个   //验证登陆结束,下面开始发帖! httppost=new HttpPost("http://tomfish88.iteye.com/admin/blogs"); formparams=new ArrayList<NameValuePair>();formparams.add(new BasicNameValuePair("blog[origin]","0"));formparams.add(new BasicNameValuePair("blog[origin]","1"));formparams.add(new BasicNameValuePair("blog[category_id]","129003"));formparams.add(new BasicNameValuePair("blog[title]",titlett));formparams.add(new BasicNameValuePair("blog[sys_category_id]","1"));formparams.add(new BasicNameValuePair("blog[sys_tag_id]","323"));formparams.add(new BasicNameValuePair("auto_save_id",""));formparams.add(new BasicNameValuePair("blog[bbcode]","false"));formparams.add(new BasicNameValuePair("blog[body]",content));formparams.add(new BasicNameValuePair("blog[diggable]","0"));   //是否发首页formparams.add(new BasicNameValuePair("commit","提交"));  uefEntity= new UrlEncodedFormEntity(formparams,"UTF-8");httppost.setEntity(uefEntity);  response= httpclient.execute(httppost,localContext);  statusCode=response.getStatusLine().getStatusCode();System.out.println(response.getStatusLine());// EntityUtils.consume(entity); // entity销毁 httppost.abort();              //post 连接关闭,关了一个才能连下一个        // EntityUtils.consume(entity); // entity销毁  httpclient.getConnectionManager().shutdown();}}



后来一直报302转向问题,我搞了一个星期了也没搞定,快崩溃了

然后我写了个带cookie跑的,输出内容的时候带登陆框,我知道我又没有登陆成功,接着贴代码

package function.httpclient;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.http.Header;import org.apache.http.HeaderIterator;import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.HttpRequest;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.ProtocolException;import org.apache.http.client.CookieStore;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.client.params.ClientPNames;import org.apache.http.client.params.CookiePolicy;import org.apache.http.client.params.HttpClientParams;import org.apache.http.client.protocol.ClientContext;import org.apache.http.cookie.Cookie;import org.apache.http.impl.client.AbstractHttpClient;import org.apache.http.impl.client.BasicCookieStore;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.impl.client.DefaultRedirectStrategy;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.BasicHttpContext;import org.apache.http.protocol.ExecutionContext;import org.apache.http.protocol.HttpContext;import org.apache.http.util.EntityUtils;public class Test3 {public Header login(String user,String pass) throws Exception{HttpClient httpclient = new DefaultHttpClient();   HttpClientParams.setCookiePolicy(httpclient.getParams(),CookiePolicy.BROWSER_COMPATIBILITY);String cookie="";String split="";HttpPost httppost=new HttpPost("http://tomfish88.iteye.com/login");List<NameValuePair> formparams=new ArrayList<NameValuePair>();formparams.add(new BasicNameValuePair("user_name","*******"));formparams.add(new BasicNameValuePair("password","*******"));UrlEncodedFormEntity uefEntity;uefEntity= new UrlEncodedFormEntity(formparams,"UTF-8");httppost.setEntity(uefEntity);//httppost.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.231 Safari/534.10");HttpResponse  response= httpclient.execute(httppost);  HttpEntity entity = response.getEntity();  if (entity == null)              throw new Exception("登录失败了");          Header head=response.getFirstHeader("Set-Cookie");  System.out.println("cookie----------");//  System.out.println(head.getValue());  HeaderIterator it =response.headerIterator("Set-Cookie");  while(it.hasNext()){  cookie+=split+it.next().toString();                split=";";  }return head;}public static void main(String args[]) throws Exception, Exception{Test3 ts= new Test3();Header cc=ts.login("********", "*****");System.out.println(cc);DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet("http://tomfish88.iteye.com"); httpget.setHeader(cc);        HttpResponse response = httpclient.execute(httpget);        HttpEntity entity = response.getEntity();System.out.println(EntityUtils.toString(entity,"UTF-8"));System.out.println("------------------end1----------------------");}}


我用的是httpclient 4.1.1 ,现在是到转向的时候302,打印页面结果如下

<html><body>You are being redirected.</body></html>

就是个转向


然后这个转向如何处理,继续到发表blog页面发表文章呢?





读书人网 >编程

热点推荐