问题描述
- 关于用http client模拟登录教务系统的问题 跪求大神指点!
-
response = httpclient.execute(httppost,context);
String result = response.getStatusLine().toString();
System.out.println(result);
HttpEntity entity1 = response.getEntity();
System.out.println(EntityUtils.toString(entity1));
Header locationHeader =response.getFirstHeader("location");System.out.println(locationHeader.toString());
String newuri = "http://jwxt1.cumt.edu.cn"+locationHeader.getValue(); System.out.println(result); HttpGet redirect=new HttpGet(newuri); CloseableHttpResponse response1=httpclient.execute(redirect,context); HttpEntity entity = response1.getEntity(); System.out.println(EntityUtils.toString(entity)); redirect.releaseConnection();
返回的结果```
HTTP/1.1 302 Moved TemporarilyObject moved
Object moved to here.
Location: /xs_main.aspx?xh=我的学号
用httpclient模拟登陆学校的方正教务系统 post数据以后再获取重定向的地址进行get访问 为何不行
解决方案
你应该没有带上登录的cookie的,虽然模拟过登录了,但是第二次请求的时候没有将cookie一起添加到请求当中。
思路:
1、模拟登录,获取登录后的cookie.
2、带着得到的cookie请求需要的操作。
给你个Jsoup的例子,比较简单:
package com.daidai.util;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupUtil {
// 登录获取到的cookie
static Map<String, String> cookieMap = new HashMap<String, String>();
/**
* @param uri
* @param paramsMap form表单中的参数和值
* @return
*/
public static boolean login(String uri, Map<String, String> paramsMap){
boolean loginFlag = false;
Response response = null;
try {
response = Jsoup.connect(uri)
.userAgent("Mozilla")
.data(paramsMap)
.method(Method.POST)
.timeout(20000)
.execute();
if (response.statusCode() == 200) {
cookieMap = response.cookies();
loginFlag = true;
}
} catch (IOException e) {
e.printStackTrace();
}
return loginFlag;
}
/**
* 提交评论内容
* @param url
* @param params 封装的参数
*/
public static void doPost(String uri, Map<String,String> paramsMap){
Response response = null;
try {
response = Jsoup.connect(uri)
.userAgent("Mozilla/5.0")
.data(paramsMap)
.method(Method.POST)
.timeout(20000)
.cookies(cookieMap)
.ignoreContentType(true)
.execute();
if (response.statusCode() == 200) {
System.out.println("评论成功!");
} else{
System.out.println("评论失败!(HTTP CODE:"+response.statusCode()+")");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
登录操作:
System.out.println("正在进行登录......");
Map<String, String> paramsMap = JsoupUtil.getParamsMap();
paramsMap.put("username", userName);
paramsMap.put("password", password);
boolean flag = JsoupUtil.login("**********", paramsMap);
if(flag){
System.out.println("登录成功!");
}else{
System.out.println("登录失败请重新进行登录!");
login();
}
解决方案二:
可以试着用OKhttp试一下
解决方案三:
重定向后再访问返回什么错误信息 是不是参数 URL不对
解决方案四:
重定向后再访问返回什么错误信息?还有第一次的cookie最好带带上,另外可以抓包分析
时间: 2024-09-21 01:00:46