Java Apache Nutch 2.3.1获取程序提供无效uri异常
我已经用Hadoop生态系统配置了ApacheNutch2.3.1。我要找一些人去阿拉伯语网站。Nutch在获取时对一些URL给出了例外。下面是一个例外示例Java Apache Nutch 2.3.1获取程序提供无效uri异常,java,exception,web-crawler,nutch,nutch2,Java,Exception,Web Crawler,Nutch,Nutch2,我已经用Hadoop生态系统配置了ApacheNutch2.3.1。我要找一些人去阿拉伯语网站。Nutch在获取时对一些URL给出了例外。下面是一个例外示例 java.lang.IllegalArgumentException: Invalid uri 'http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html': escaped absolute path not valid at org
java.lang.IllegalArgumentException: Invalid uri 'http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html': escaped absolute path not valid
at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:222)
at org.apache.commons.httpclient.methods.GetMethod.<init>(GetMethod.java:89)
at org.apache.nutch.protocol.httpclient.HttpResponse.<init>(HttpResponse.java:77)
at org.apache.nutch.protocol.httpclient.Http.getResponse(Http.java:173)
at org.apache.nutch.protocol.http.api.HttpBase.getProtocolOutput(HttpBase.java:245)
at org.apache.nutch.fetcher.FetcherReducer$FetcherThread.run(FetcherReducer.java:564)
java.lang.IllegalArgumentException:无效uri'http://agahi.safirak.com/ads/850/html:转义绝对路径无效
位于org.apache.commons.httpclient.HttpMethodBase.(HttpMethodBase.java:222)
位于org.apache.commons.httpclient.methods.GetMethod.(GetMethod.java:89)
位于org.apache.nutch.protocol.httpclient.HttpResponse(HttpResponse.java:77)
位于org.apache.nutch.protocol.httpclient.Http.getResponse(Http.java:173)
http.api.HttpBase.getProtocolOutput(HttpBase.java:245)
位于org.apache.nutch.fetcher.FetcherReducer$FetcherThread.run(FetcherReducer.java:564)
即使在1.x分支上,我也能重现这个问题。问题在于Apache HTTP客户端库内部使用的Java URI类不支持非转义UTF-8字符:
从java.net.URI
的JavaDoc文档中:
字符类别
RFC2396精确地指定URI引用的各个组件中允许哪些字符。以下类别(大部分取自该规范)用于描述这些约束条件:
- alpha美国ASCII字母字符“A”到“Z”和“A”到“Z”
- 数字US-ASCII十进制数字字符,“0”到“9”
- alphanum所有字母和数字字符 未保留所有alphanum字符以及字符串“-!.~”()*”中的字符
- punct字符串中的字符“,;:$&+=”
- 保留所有点状字符以及字符串“+/[]”中的字符
- 转义转义八位字节,即由百分比字符(“%”)和两个十六进制数字('0'-'9'、'A'-'F'和'A'-'F'组成的三元组
- other不在US-ASCII字符集中的Unicode字符不是控制字符(根据
方法),也不是空格字符(根据character.isISOControl
方法)(与RFC 2396的偏差,仅限于US-ASCII)character.isSpaceChar
协议http
插件。我在本地进行了测试,parsechecker工作正常:
➜ local (master) ✗ bin/nutch parsechecker "http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html"
fetching: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
robots.txt whitelist not configured.
parsing: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
contentType: text/html
signature: 048b390ab07464f5d61ae09646253529
---------
Url
---------------
http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
---------
ParseData
---------
Version: 5
Status: success(1,0)
Title: پیچ بند بادی هفتیری 1800 دور بادی جیسون-نیازمندی سفیرک
Outlinks: 76
outlink: toUrl: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html anchor:
outlink: toUrl: http://agahi.safirak.com/assets/fonts/font-awesome/css/font-awesome.min.css anchor:
outlink: toUrl: http://agahi.safirak.com/assets/css/bootstrap.css anchor:
...
即使在1.x分支上,我也能复制这个问题。问题在于Apache HTTP客户端库内部使用的Java URI类不支持非转义UTF-8字符: 从
java.net.URI
的JavaDoc文档中:
字符类别
RFC2396精确地指定URI引用的各个组件中允许哪些字符。以下类别(大部分取自该规范)用于描述这些约束条件:
- alpha美国ASCII字母字符“A”到“Z”和“A”到“Z”
- 数字US-ASCII十进制数字字符,“0”到“9”
- alphanum所有字母和数字字符 未保留所有alphanum字符以及字符串“-!.~”()*”中的字符
- punct字符串中的字符“,;:$&+=”
- 保留所有点状字符以及字符串“+/[]”中的字符
- 转义转义八位字节,即由百分比字符(“%”)和两个十六进制数字('0'-'9'、'A'-'F'和'A'-'F'组成的三元组
- other不在US-ASCII字符集中的Unicode字符不是控制字符(根据
方法),也不是空格字符(根据character.isISOControl
方法)(与RFC 2396的偏差,仅限于US-ASCII)character.isSpaceChar
协议http
插件。我在本地进行了测试,parsechecker工作正常:
➜ local (master) ✗ bin/nutch parsechecker "http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html"
fetching: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
robots.txt whitelist not configured.
parsing: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
contentType: text/html
signature: 048b390ab07464f5d61ae09646253529
---------
Url
---------------
http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html
---------
ParseData
---------
Version: 5
Status: success(1,0)
Title: پیچ بند بادی هفتیری 1800 دور بادی جیسون-نیازمندی سفیرک
Outlinks: 76
outlink: toUrl: http://agahi.safirak.com/ads/850/پیچ-بند-بادی-هفتیری-1800-دور-بادی-جیسون.html anchor:
outlink: toUrl: http://agahi.safirak.com/assets/fonts/font-awesome/css/font-awesome.min.css anchor:
outlink: toUrl: http://agahi.safirak.com/assets/css/bootstrap.css anchor:
...
主席先生,我不知道如何及在何处提出这问题。您可以打开此问题OK,我在我们的问题跟踪程序()中打开了一个问题您可以在那里跟踪进度。先生,我不知道如何以及在何处生成此问题。你可以打开这个问题OK,我在我们的问题跟踪器()中打开了一个问题,你可以在那里跟踪进度。