如何在 CouchDB 中找到错误请求的原因
How to find the reason for a bad request in CouchDB
我正在使用这样的 System.Net.WebClient 将文档批量上传到 CouchDB:
webClient.UploadString("couchdb.host.com:5984/db/_bulk_docs", "POST", json_data);
这通常工作正常,但有时我会收到状态为 'Bad Request' 的 WebException (400)。
不幸的是,这是我得到的唯一信息,所以我真的不知道是什么导致了异常。
我检查了 /var/log/couchdb/couchdb.log 下的日志文件,但我在那里没有得到任何进一步的信息:
[notice] 2019-09-10T15:26:09.173949Z couchdb@host.com <0.5318.568> f50ab02d22 host.com:5984 x.x.x.x undefined POST /db/_bulk_docs 400 ok 75
所以我的问题是:
是否在 WebException 对象的某处隐藏了更多信息?如果有,我在哪里可以找到它?
有没有办法在服务器端获取更多信息?
我怀疑我要上传的文件太大了。我该如何检查?
更新:
我将错误请求转储到一个文件中:
catch (WebException ex)
{
File.WriteAllText("C:\temp\couchdb_bad_request.json", json_data);
}
并再次尝试:
curl -X POST http:/couchdb.host.com:5984/db/_bulk_docs -H "Content-Type: application/json" -d @couchdb_bad_request.json
这次我得到了一个201。那么curl和WebClient请求有什么区别呢?
我的 json 数据如下所示:
{
"docs": [
{
"Type": "Image",
"_attachments": {
"123_original.jpg": {
"content_type": "image/jpeg",
"data": "<base64-encoded image data>"
}
},
"ID": "123",
"_id": "123",
"FileName": "some_file.jpg",
"AttachmentMetaData": {
"original": {
"Width": 864,
"Height": 576,
"MD5Checksum": "a20ecae8e3a7df8cc8558a71efc2b573"
}
}
},
{...}
]
}
根据你的问题信息,肯定是请求数据在某个地方出错了。由于有些请求可以,有些则不行,这可能是由于编码问题。
您可能需要查看 CouchDB 的响应,其中通常会提到编码问题。
阅读回复:
catch ( WebException exception )
{
string responseText;
using(var reader = new StreamReader(exception.Response.GetResponseStream()))
{
responseText = reader.ReadToEnd();
}
}
在节点上,您可以使用await error.json()
读取异常响应
try {
await request();
} catch(error) {
console.log(await error.json());
}
我正在使用这样的 System.Net.WebClient 将文档批量上传到 CouchDB:
webClient.UploadString("couchdb.host.com:5984/db/_bulk_docs", "POST", json_data);
这通常工作正常,但有时我会收到状态为 'Bad Request' 的 WebException (400)。 不幸的是,这是我得到的唯一信息,所以我真的不知道是什么导致了异常。
我检查了 /var/log/couchdb/couchdb.log 下的日志文件,但我在那里没有得到任何进一步的信息:
[notice] 2019-09-10T15:26:09.173949Z couchdb@host.com <0.5318.568> f50ab02d22 host.com:5984 x.x.x.x undefined POST /db/_bulk_docs 400 ok 75
所以我的问题是:
是否在 WebException 对象的某处隐藏了更多信息?如果有,我在哪里可以找到它?
有没有办法在服务器端获取更多信息?
我怀疑我要上传的文件太大了。我该如何检查?
更新:
我将错误请求转储到一个文件中:
catch (WebException ex)
{
File.WriteAllText("C:\temp\couchdb_bad_request.json", json_data);
}
并再次尝试:
curl -X POST http:/couchdb.host.com:5984/db/_bulk_docs -H "Content-Type: application/json" -d @couchdb_bad_request.json
这次我得到了一个201。那么curl和WebClient请求有什么区别呢?
我的 json 数据如下所示:
{
"docs": [
{
"Type": "Image",
"_attachments": {
"123_original.jpg": {
"content_type": "image/jpeg",
"data": "<base64-encoded image data>"
}
},
"ID": "123",
"_id": "123",
"FileName": "some_file.jpg",
"AttachmentMetaData": {
"original": {
"Width": 864,
"Height": 576,
"MD5Checksum": "a20ecae8e3a7df8cc8558a71efc2b573"
}
}
},
{...}
]
}
根据你的问题信息,肯定是请求数据在某个地方出错了。由于有些请求可以,有些则不行,这可能是由于编码问题。
您可能需要查看 CouchDB 的响应,其中通常会提到编码问题。
阅读回复:
catch ( WebException exception )
{
string responseText;
using(var reader = new StreamReader(exception.Response.GetResponseStream()))
{
responseText = reader.ReadToEnd();
}
}
在节点上,您可以使用await error.json()
try {
await request();
} catch(error) {
console.log(await error.json());
}