国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android模擬登錄評論CSDN實現代碼

2019-12-12 04:49:54
字體:
來源:轉載
供稿:網友

有時候作為非官方開發的APP集成了官方的所有信息,但是現在需要實現另一個功能那就是登錄發表評論到官方的網站,而非官方的APP并不知道官方網站是怎么實現登錄與評論的,而且越大型的網站,為了防止這樣的事情發生,增加了許許多多阻礙,不過我們這里可以給大家提供一個通用的方式,就是有點費時,不過按照此方法,基本所有的網站都不在話下。今天就拿CSDN做一下試驗。

1.登錄CSDN

查看其源代碼看看其form表單:

其難點在post data數據中it的value與execution的value,其為隨機產生,這估計是CSDN防止惡意登錄設置的動態標識,不過你可以在Android 中先獲取該值然后設置到需要提交的表單項中。

下面使用xutils與Jsoup獲取網頁屬性:

RequestParams params = new RequestParams("https://passport.csdn.net/account/login?ref=toolbar");params.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");x.http().get(params, new Callback.CommonCallback<String>() {  @Override  public void onSuccess(String result) {    Log.i("csdn", "onSuccess");    RequestParams params1=new RequestParams("https://passport.csdn.net/account/login?ref=toolbar");    params1.setHeader("Accept","text/html, application/xhtml+xml, */*");    params1.setHeader("Content-Type", "application/x-www-form-urlencoded");    params1.setHeader("DNT", "1");    params1.setHeader("Host","passport.csdn.net");    params1.setHeader("Accept-Language","zh-CN");    params1.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");    Document doc=Jsoup.parse(result);    Element formEle=doc.getElementById("fm1");    Elements inputs=formEle.getElementsByTag("input");    for (Element input : inputs){      if(input.attr("name").equals("lt")){        params1.addQueryStringParameter("lt", input.attr("value"));      }else if(input.attr("name").equals("execution")){        params1.addQueryStringParameter("execution", input.attr("value"));      }else if(input.attr("name").equals("_eventId")){        params1.addQueryStringParameter("_eventId", input.attr("value"));      }    }    params1.addQueryStringParameter("username", "你的帳號");    params1.addQueryStringParameter("password","你的密碼");  }  @Override  public void onError(Throwable ex, boolean isOnCallback) {    Log.i("csdn", "onError");  }  @Override  public void onCancelled(CancelledException cex) {    Log.i("csdn", "onCancelled");  }  @Override  public void onFinished() {    Log.i("csdn", "onFinished");  }});

這樣我們不僅獲取了網頁的動態標識,而且設置到即將提交表單的RequestParams當中。

這樣我們重新生成了一個params1,這個時候所有表單信息都已經設置到其中,下面就就模擬登錄了:

public void getLoginCSDN(final RequestParams params){  x.http().request(HttpMethod.POST, params, new Callback.CommonCallback<String>() {    @Override    public void onSuccess(String result) {      Log.i("liyuanjinglyj", "onSuccess");      System.out.println(result.toString());    }    @Override    public void onError(Throwable ex, boolean isOnCallback) {      ex.printStackTrace();      Log.i("liyuanjinglyj", "onError");    }    @Override    public void onCancelled(CancelledException cex) {      Log.i("liyuanjinglyj", "onCancelled");    }    @Override    public void onFinished() {      Log.i("liyuanjinglyj", "onFinished");    }  });

調用getLoginCSDN將在日志中輸出如下信息:

2.評論CSDN博文

首先我們隨便打開一篇博文,將httpWatch也打開?,F在在評論中輸入信息,不要立即點擊提交,先開啟httpWatch。然后提交,然后關閉,我們會得到如下界面:

這里提交的表單數據為三個,還有一個Query String:
這里為什么不打開HTML代碼看,那我們先看看HTML代碼:
能看出什么嗎?我唯一看出來的就是表單在div id=comment_form中,可是提交的表單項去哪里呢?答案就是CSDN寫在JS里面了。下面我們打開其處理comment_form的JS。

人家寫在這里,你不費點時間還真找不到。如果你按照JS里面的name提交表單數據,那么你肯定得不到任何結果。返回0以失敗結束。

下面我們開始設置評論的相關數據到RequestParams中:

RequestParams requestParams = new RequestParams("http://blog.csdn.net/ljy1988123/comment/submit");requestParams.setConnectTimeout(15000);requestParams.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");requestParams.setHeader("Accept-Language", "zh-CN");requestParams.setHeader("Host","blog.csdn.net");requestParams.setHeader("Referer","http://blog.csdn.net/ljy1988123/article/details/50581207");requestParams.setHeader("Accept", "*/*");requestParams.setHeader("Content-Type", "application/x-www-form-urlencoded");requestParams.setHeader("X-Requested-With", "XMLHttpRequest");requestParams.setHeader("Connection", "Keep-Alive");requestParams.setMultipart(true);requestParams.addQueryStringParameter("id", "50581207");requestParams.addParameter("commentid", " ");requestParams.addParameter("content", "  太喜歡這篇博文了。。 98 ");requestParams.addParameter("replyId", " ");setHttpContent(requestParams);

當然這里面的數據有的并不需要,為了測試我按照HttpWatch中給的設置的:
然后在調用post請求:

public void setHttpContent(RequestParams params){  x.http().post(params, new Callback.CommonCallback<String>() {    @Override    public void onSuccess(String result) {      Log.i("liyuanjinglyj", "onSuccess");      System.out.println(result.toString());    }    @Override    public void onError(Throwable ex, boolean isOnCallback) {      ex.printStackTrace();      Log.i("liyuanjinglyj", "onError");    }    @Override    public void onCancelled(CancelledException cex) {      Log.i("liyuanjinglyj", "onCancelled");    }    @Override    public void onFinished() {      Log.i("liyuanjinglyj", "onFinished");    }  });}

將輸出如下日志信息:

其返回1代表成功,返回0代表失敗,唯一需要說明的是我設置的超時時間是15秒,為什么設置這么長時間,想必大家比我清楚,CSDN在網頁評論都需要這么長時間,何況手機端呢。

在看看網頁效果:

多的一個是測試中超時報錯發表上去的。

這篇文章只是模擬的登錄與評論CSDN,其他網站與這差不多。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台山市| 海丰县| 安国市| 子长县| 淅川县| 富源县| 三亚市| 包头市| 邹城市| 石首市| 武夷山市| 贵州省| 永顺县| 砀山县| 霍州市| 阿拉尔市| 忻州市| 麻江县| 丰镇市| 衡山县| 乌苏市| 五河县| 镇远县| 神木县| 承德县| 罗田县| 浦城县| 福鼎市| 林甸县| 秦皇岛市| 开鲁县| 澜沧| 华宁县| 崇义县| 图片| 阳春市| 琼结县| 宽城| 南召县| 运城市| 佳木斯市|