Can';无法在android设备上使用验证码从服务器获取数据
我试图从中获取数据,但服务器响应captcha不正确或已过期。在先进的rest客户端进入chrome请求工作的完美。我获取数据的方法是:Can';无法在android设备上使用验证码从服务器获取数据,android,cookies,captcha,Android,Cookies,Captcha,我试图从中获取数据,但服务器响应captcha不正确或已过期。在先进的rest客户端进入chrome请求工作的完美。我获取数据的方法是: 从获取会话 获取会话id为http://www.gibdd.ru/proxy/check/getCaptcha.php?PHPSESSID=te67jgdiv53v956fcv8rk9mg81 然后将表单数据发送到http://www.gibdd.ru/proxy/check/fines/2.0/client.php 我想我的cookies问题是,我设置coo
http://www.gibdd.ru/proxy/check/getCaptcha.php?PHPSESSID=te67jgdiv53v956fcv8rk9mg81
http://www.gibdd.ru/proxy/check/fines/2.0/client.php
private static final String URL= "http://www.gibdd.ru";
private static RestAdapter restAdapter;
public interface IGibdd {
@GET("/proxy/check/getSession.php")
void getSession(Callback<Session> callback);;
@FormUrlEncoded
@POST("/proxy/check/fines/2.0/client.php")
void getFines(@Field("regnum") String regnum,
@Field("regreg") String regreg,
@Field("stsnum") String stsnum,
@Field("req") String reqfines,
@Field("captchaWord") String captchaWord,
Callback<Answer> callback);
}
private静态最终字符串URL=”http://www.gibdd.ru";
私有静态RestAdapter RestAdapter;
公共接口IGibdd{
@GET(“/proxy/check/getSession.php”)
void getSession(回调);;
@FormUrlEncoded
@POST(“/proxy/check/fines/2.0/client.php”)
void getFines(@Field(“regnum”)字符串regnum,
@字段(“regreg”)字符串regreg,
@字段(“stsnum”)字符串stsnum,
@字段(“req”)字符串,
@字段(“captchaWord”)字符串captchaWord,
回调(回调);
}
此方法在获取会话id后请求验证码
private void getCaptcha() {
final API.IGibdd iGibdd = API.getRestAdapter(this).create(API.IGibdd.class);
iGibdd.getSession(new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
if (response.getStatus() != 200) {
getCaptcha();
} else {
String cookie = API.loadCookies(CheckFinesActivity.this);
url = getString(R.string.captcha_url) + cookie + "&" + new Date().getTime();
HashMap<String, String> map = new HashMap<String, String>();
map.put("Cookie", cookie);
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.extraForDownloader(map)
.build();
ImageLoaderConfiguration conf = new ImageLoaderConfiguration.Builder(CheckFinesActivity.this)
.defaultDisplayImageOptions(defaultOptions)
.build();
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(conf);
imageLoader.displayImage(url, mCaptchaImage);
}
}
@Override
public void failure(RetrofitError error) {
error.printStackTrace();
}
});
}
private void getCaptcha(){
final API.IGibdd-IGibdd=API.getRestAdapter(this.create)(API.IGibdd.class);
getSession(新的回调(){
@凌驾
公共无效成功(响应,响应2){
if(response.getStatus()!=200){
getCaptcha();
}否则{
字符串cookie=API.loadCookies(CheckFinesActivity.this);
url=getString(R.string.captcha_url)+cookie+“&”+新日期().getTime();
HashMap=newHashMap();
map.put(“Cookie”,Cookie);
DisplayImageOptions defaultOptions=新建DisplayImageOptions.Builder()
.cacheInMemory(真)
.cacheOnDisk(真)
.imageScaleType(imageScaleType.IN\u示例\u电源\u,共2个)
.extraForDownloader(地图)
.build();
ImageLoaderConfiguration conf=新建ImageLoaderConfiguration.Builder(检查finesActivity.this)
.defaultDisplayImageOptions(默认选项)
.build();
ImageLoader ImageLoader=ImageLoader.getInstance();
init(conf);
displayImage(url,mCaptchaImage);
}
}
@凌驾
公共无效失败(错误){
错误。printStackTrace();
}
});
}
然后,在输入验证码之后,我调用这个方法
String reqfines = "fines:" + mCarNumber.getText().toString() + ":" + mCarRegion.getText().toString() + ":" + mDocNumber.getText().toString();
iGibdd.getFines(mCarNumber.getText().toString(),
mCarRegion.getText().toString(),
mDocNumber.getText().toString(),
reqfines,
mCaptcha.getText().toString(),
new Callback<Answer>() {
@Override
public void success(Answer s, Response response) {
Toast.makeText(CheckFinesActivity.this, "Success", Toast.LENGTH_LONG).show();
API.clearSP(CheckFinesActivity.this);
getCaptcha();
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(CheckFinesActivity.this, "Error", Toast.LENGTH_LONG).show();
}
});
}
});
String reqfines=“fines:”+mCarNumber.getText().toString()+”:“+mCarRegion.getText().toString()+”:“+mDocNumber.getText().toString()”;
iGibdd.getFines(mCarNumber.getText().toString(),
mCarRegion.getText().toString(),
mDocNumber.getText().toString(),
罚款,
mCaptcha.getText().toString(),
新回调函数(){
@凌驾
公共无效成功(回答s、回答回应){
Toast.makeText(CheckFinesActivity.this,“Success”,Toast.LENGTH_LONG.show();
API.clearSP(CheckFinesActivity.this);
getCaptcha();
}
@凌驾
公共无效失败(错误){
Toast.makeText(CheckFinesActivity.this,“Error”,Toast.LENGTH_LONG.show();
}
});
}
});
UPD2:
问题解决了。我为一个新请求重新创建了OkHttp客户端,它清除了当前会话您能分享一些代码吗?仅凭文字说明很难找到您的问题。@Felicatus我添加了一些代码