【问题标题】:maven-linkcheck-plugin warning during link checking: cookie rejected, illegal domain attribute链接检查期间的 maven-linkcheck-plugin 警告:cookie 被拒绝,非法域属性
【发布时间】:2016-05-26 15:46:58
【问题描述】:

我正在生成一个项目网站

mvn site

Linkcheck 已作为报告插件激活

<reporting>
    <plugins>
        (...)
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-linkcheck-plugin</artifactId>
            <version>1.2</version>
        </plugin>
    </plugins>
</reporting>

代码是Java。

类文件的注释头包含指向 StackOverflow 问题的链接,例如

/**
 * Example written by Bruno Lowagie in answer to:
 * https://stackoverflow.com/questions/26853894/continue-field-output-on-second-page-with-itextsharp
 */

在网站生成的链接检查阶段,我收到如下警告:

[ WARN] Cookie rejected: "$Version=0; __cfduid=dab443ca4b7fc1de5130856b7401f83cb1455551507; $Path=/; $Domain=.stackoverflow.com". Illegal domain attribute ".stackoverflow.com". Domain of origin: "stackoverflow.com"
[ WARN] Cookie rejected: "$Version=0; logged_in=no; $Path=/; $Domain=.github.com". Illegal domain attribute ".github.com". Domain of origin: "github.com"

我已经查看了有关“Cookie 被拒绝:非法域属性”的其他一些 SO 问题。根据this aswer 的说法,问题不在于我,而是 StackOverflow 和 GitHub 设置了一个不允许发送的 cookie,maven-linkcheck-plugin 的底层 http 库告诉我这一点。此行为与RFC 2109 所指定的完全相同。

链接的问题提供了一种解决方法:在 httpclient 中设置一个 cookie 策略,基本上说,我不关心坏 cookie,gimme gimme gimme。我需要容忍不合规的服务器,所以我需要使用cookie guide 中描述的浏览器兼容性cookie 规范。

我的问题是:由于我没有使用 httpclient 而是使用 maven,我应该在 pom.xml 中添加什么来消除这些 cookie 警告?我没有发现任何有用的东西

【问题讨论】:

  • 也许您可以为 maven-linkcheck-plugin / doxia-linkcheck 提供补丁?
  • 我是 QA 工程师,而不是开发人员。我能做的最好的就是提交一份错误报告,其中包含详细的重现步骤。

标签: java maven cookies apache-httpclient-4.x doxia


【解决方案1】:

我也受到这个问题的影响。

你提到的链接检查文档显示有一个httpClientParameters configuration option

httpClientParameters:

获取链接时要使用的额外 HttpClient 参数。例如:

<httpClientParameters>
 <property>
  <name>http.protocol.max-redirects</name>
  <value>10</value>
 </property>
</httpClientParameters>

HttpClient preference page

底部的那个链接显示http.protocol.cookie-policy是HttpClient参数之一。

理论上,您可以在 pom 中执行以下操作来配置底层 httpclient:

<reporting>
    <plugin>
        <artifactId>maven-linkcheck-plugin</artifactId>
        <version>1.2</version>
        <configuration>
            <httpClientParameters>
                <property>
                    <name>http.protocol.cookie-policy</name>
                    <value>ignoreCookies</value>
                </property>
            </httpClientParameters>
        </configuration>
    </plugin>
</reporting>

其中ignoreCookiesCookiePolicy.IGNORE_COOKIES 的字符串值。

实际上,这是行不通的。正如你提到的,这里有层,maven-linkcheck-plugin -> doxia-linkcheck -> httpclient。调试到报告生成,我可以看到 MLP 将参数传递到 doxia-linkcheck 但是right about here 发生了一些不幸的事情。

if ( this.cl == null )
{
    initHttpClient();
}

if ( this.http.getHttpClientParameters() != null )
{
    for ( Map.Entry<Object, Object> entry : this.http.getHttpClientParameters().entrySet() )
    {
        if ( entry.getValue() != null )
        {
            System.setProperty( entry.getKey().toString(), entry.getValue().toString() );
        }
    }
}

cl 是发出请求的 httpclient,http 是一个 bean,它保存在 pom.xml 中配置的值。不是将它们放在一起,而是将 bean 属性转储到系统属性空间中,而 httpclient 不在那里。有一个明显的例外,http.protocol.max-redirects 在代码的其他地方得到了特殊处理,巧合的是,maven-linkcheck-plugin 文档中使用的示例。所以看起来这个通用功能确实针对特定的东西,而通用用例被忽略了。

所以,我们已经用尽了正确配置它的能力,还剩下什么?我们可以让记录器静音。如今,Maven 使用 SLF4JSimpleLogger,但 doxia‑linkcheck 正在使用 commons‑logging 和 log4j 1.2.14。旧的 log4j 对我们来说不是很容易重新配置为外部用户,但我们可以通过将 maven-linkcheck-plugin 添加到 pluginManagement 部分并添加桥接依赖项来填充到 SLF4J:

<pluginManagement> 
    <plugin>
        <artifactId>maven-linkcheck-plugin</artifactId>
        <version>1.2</version>
        <dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.7.28</version>
            </dependency>
        </dependencies>
    </plugin>
</pluginManagement>

您现在可以通过提高相关记录器的日志级别来隐藏警告:

mvn site -Dorg.slf4j.simpleLogger.log.org.apache.commons.httpclient.HttpMethodBase=error

作为奖励,插件的剩余日志现在使用 maven 的日志系统而不是 log4j,因此您可以获得彩色输出和一致的格式。

但是,您可能不想在每次生成站点时都指定该系统属性来调整日志。我推荐.mvn/jvm.config 文件:

mkdir -p .mvn && cd .mvn
echo "-Dorg.slf4j.simpleLogger.log.org.apache.commons.httpclient.HttpMethodBase=error" >>jvm.config

如果你真的想把它全部保存在 pom 中,还有properties-maven-plugin

这完全是为了在 doxia-linkcheck 中更好地修复的东西,但它最近没有看到太多的发展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 2012-07-14
    • 1970-01-01
    • 2014-02-21
    • 2020-08-30
    • 1970-01-01
    • 2011-11-04
    • 2018-04-14
    相关资源
    最近更新 更多