我正在使用 Apache Abdera 将 atom 多部分数据发布到我的服务器,并且遇到了一些我无法确定的奇怪问题。
这看起来像是分块传输编码的问题,但我没有足够的经验来确定。问题表现为服务器抛出错误,表明我发送的请求仅包含一个 mime 部分,而不是所需的两个部分。我将 Wireshark 附加到界面并捕获了对话,它是这样的:
POST /sss/col-uri/2ee98ea1-f9ad-4f01-9b1c-cfa3c4a6dc3c HTTP/1.1
Host: localhost
Expect: 100-continue
Transfer-Encoding: chunked
Content-Type: multipart/related; boundary="1306399868259";type="application/atom+xml;type=entry"
服务器的响应:
HTTP/1.1 100 Continue
我的客户继续说:
198
--1306399868259
Content-Type: application/atom+xml;type=entry
Content-Disposition: attachment; name="atom"
<entry xmlns="http://www.w3.org/2005/Atom"><title xmlns="http://purl.org/dc/terms/">Richard Woz Ere</title><bibliographicCitation xmlns="http://purl.org/dc/terms/">this is my citation</bibliographicCitation><content type="application/zip" src="cid:48bd9436-e8b6-4f68-aa83-5c88eda52fd4" /></entry>
0
b0e9
--1306399868259
Content-Type: application/zip
Content-Disposition: attachment; name="payload"; filename="example.zip"
Content-ID: <48bd9436-e8b6-4f68-aa83-5c88eda52fd4>
Packaging: http://purl.org/net/sword/package/SimpleZip
此时服务器响应:
HTTP/1.1 400 Bad Request
Date: Thu, 26 May 2011 08:51:08 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8l DAV/2 mod_wsgi/3.3 Python/2.6.1
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml
指示错误(这很好理解)。我的服务器继续将一堆 base64 编码位流式传输到输出流中,但与此同时,服务器没有在监听,它已经确定请求是错误的。
不幸的是,我不负责 HTTP 层——这一切都由 Abdera 使用 Apache httpclient 处理。我的代码如下所示:
client.execute("POST", url.toString(), new SWORDMultipartRequestEntity(deposit), options);
在这里,SWORDMultipartRequestEntity 是标准 Abdera MultipartRequestEntity 类的副本,其中包含一些额外的标头(例如,请参见上面代码段中的 Packaging);“存款”参数只是一个包含原子部分和输入流的对象。
附加调试器时,我可以很好地执行这行代码,然后它消失在老鼠洞中,然后我又得到了这个错误。
任何提示或提示?我几乎用尽了我的攻击角度!
对我来说唯一突出的是,在 atom:entry 文档之后,只有一个带有“0”的换行符,这似乎是分块传输编码,代表“我完成了”。不知道它是如何到达那里的,或者它是否真的有任何影响。非常感谢帮助。
干杯,
理查德