Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';无法在android设备上使用验证码从服务器获取数据_Android_Cookies_Captcha - Fatal编程技术网

Can';无法在android设备上使用验证码从服务器获取数据

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

我试图从中获取数据,但服务器响应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问题是,我设置cookies=sessionId,就像rest客户端一样,但出现了一些问题

    UPD:我正在对服务器请求进行改造 那个API类

    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我添加了一些代码