webMagic解析淘寶cookie 提示Invalid cookie header


  webMagic解析淘寶cookie 提示Invalid cookie header

 在使用webMagic框架做爬蟲爬取淘寶極又家頁面時候一直提醒cookie設置不可用如下圖

 

  淘寶的驗證特別嚴重,cookie沒有正常設置進去后面會頻繁彈出驗證頁面,這是我們不想看到的。為了解決這個問題,debug進入源碼。

    /**
* 摘選自
org.apache.http.impl.cookie.RFC2965Spec
   */
    @Override
    public List<Cookie> parse(
            final Header header,
            final CookieOrigin origin) throws MalformedCookieException {
        Args.notNull(header, "Header");
        Args.notNull(origin, "Cookie origin");
        if (!header.getName().equalsIgnoreCase(SM.SET_COOKIE2)) {
            throw new MalformedCookieException("Unrecognized cookie header '"
                    + header.toString() + "'");
        }
        final HeaderElement[] elems = header.getElements();
        return createCookies(elems, adjustEffectiveHost(origin));
    }
    /**
     *  摘選自org.apache.http.impl.cookie.RFC2965Spec
   *
     */
  public interface SM {
      public static final String COOKIE            = "Cookie";
      public static final String COOKIE2           = "Cookie2";
      public static final String SET_COOKIE        = "Set-Cookie";
      public static final String SET_COOKIE2       = "Set-Cookie2";
}

 

  走到這邊就大概明白了,這邊cookie的解析規則用的RFC2965Spec,而淘寶的cookie不是遵循此規則。

  期間去網上找了一下資料,大概了解了一下CookieSpec到底是個什么玩意。了解完了問題,接下來就是解決問題。


 

   

  解決的過程中,使用了各種騷操作,沒有任何卵用,就不贅述。最后還是debug進入webMagic的源碼,查找原因,看到HttpUriRequestConverter類時發現了問題

  - -!這邊寫死了。使用標准模式解析其實和合理,然而並不是所有網站都是遵循標准來實現的。

 

1  if (site != null) {
2             requestConfigBuilder.setConnectionRequestTimeout(site.getTimeOut())
3                     .setSocketTimeout(site.getTimeOut())
4                     .setConnectTimeout(site.getTimeOut())
5                     //爬蟲Cookie不能識別
6                     .setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY);
7         }

   稍作修改,問題消失了。

   然而這種將代碼寫死的做法並不推薦,應該做成可配置的,默認使用標准的CookieSpec才是比較合理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM