最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android模擬登錄評論CSDN實現(xiàn)代碼

 更新時間:2016年11月02日 10:48:05   作者:Git_Android  
本篇文章主要介紹了Android模擬登錄評論CSDN實現(xiàn)代碼,可以實現(xiàn)登陸發(fā)表評論到官方網(wǎng)站,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

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

1.登錄CSDN

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

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

下面使用xutils與Jsoup獲取網(wǎng)頁屬性:

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");
  }
});

這樣我們不僅獲取了網(wǎng)頁的動態(tài)標識,而且設(shè)置到即將提交表單的RequestParams當中。

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

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");
    }
  });

調(diào)用getLoginCSDN將在日志中輸出如下信息:

2.評論CSDN博文

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

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

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

下面我們開始設(shè)置評論的相關(guān)數(shù)據(jù)到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);

當然這里面的數(shù)據(jù)有的并不需要,為了測試我按照HttpWatch中給的設(shè)置的:
然后在調(diào)用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代表失敗,唯一需要說明的是我設(shè)置的超時時間是15秒,為什么設(shè)置這么長時間,想必大家比我清楚,CSDN在網(wǎng)頁評論都需要這么長時間,何況手機端呢。

在看看網(wǎng)頁效果:

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

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

相關(guān)文章

  • Android:“萬能”Activity重構(gòu)篇

    Android:“萬能”Activity重構(gòu)篇

    本文主要介紹了mvp以及每一層,以及使用mvp來重構(gòu)“萬能”Activity,其實每一層需要注意的東西還有很多,比如model層是最難寫的一層。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Android使用ViewStub實現(xiàn)布局優(yōu)化方法示例

    Android使用ViewStub實現(xiàn)布局優(yōu)化方法示例

    這篇文章主要為大家介紹了Android使用ViewStub實現(xiàn)布局優(yōu)化方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Kotlin的枚舉與異常示例詳解

    Kotlin的枚舉與異常示例詳解

    這篇文章主要給大家介紹了關(guān)于Kotlin的枚舉與異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Kotlin具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • 淺談Android RecyclerView 間距全適配

    淺談Android RecyclerView 間距全適配

    本篇文章主要介紹了淺談Android RecyclerView 間距全適配,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Android實現(xiàn)透明度可變的標題欄效果

    Android實現(xiàn)透明度可變的標題欄效果

    這篇文章主要介紹了Android實現(xiàn)透明度可變的標題欄效果的相關(guān)資料,具有一定的參考價值,需要的朋友可以參考下
    2016-02-02
  • Android7.0指紋服務(wù)FingerprintService實例介紹

    Android7.0指紋服務(wù)FingerprintService實例介紹

    這篇文章主要介紹了Android7.0指紋服務(wù)FingerprintService介紹,需要的朋友可以參考下
    2018-01-01
  • Android中AsyncTask異步任務(wù)使用詳細實例(一)

    Android中AsyncTask異步任務(wù)使用詳細實例(一)

    AsyncTask是Android提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現(xiàn)異步操作,并提供接口反饋當前異步執(zhí)行的程度(可以通過接口實現(xiàn)UI進度更新),最后反饋執(zhí)行的結(jié)果給UI主線程,通過本文給大家介紹Android中AsyncTask異步任務(wù)使用詳細實例(一),需要的朋友參考下
    2016-02-02
  • Android跳轉(zhuǎn)三方應(yīng)用實例代碼

    Android跳轉(zhuǎn)三方應(yīng)用實例代碼

    大家好,本篇文章主要講的是Android跳轉(zhuǎn)三方應(yīng)用實例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android控件gridview實現(xiàn)單行多列橫向滾動效果

    Android控件gridview實現(xiàn)單行多列橫向滾動效果

    這篇文章主要為大家詳細介紹了Android控件gridview實現(xiàn)單行多列橫向滾動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android okhttp3.0忽略https證書的方法

    Android okhttp3.0忽略https證書的方法

    這篇文章主要介紹了 Android okhttp3.0忽略https證書的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

肃南| 象山县| 崇州市| 治多县| 宜川县| 昌都县| 河源市| 凤台县| 穆棱市| 永济市| 峨眉山市| 赤壁市| 昌都县| 黄山市| 平安县| 上虞市| 石首市| 邓州市| 天峨县| 五家渠市| 宜城市| 无为县| 宜章县| 莱芜市| 垦利县| 泰和县| 池州市| 吴桥县| 连山| 道真| 西安市| 绿春县| 田林县| 鄂伦春自治旗| 天门市| 通化市| 江源县| 宜阳县| 龙游县| 洞口县| 建平县|