如何解决Webdav PROPFIND,Curl或Postman没有响应
我有一个运行在本地网络上的webdav服务器,我能够获得其他请求的响应,但是PROPFIND使得Curl和Postman都挂起而没有返回任何内容,尽管我看到响应成功(207多状态), Wireshark。我怀疑与网络适配器或分块编码有关,但确实可以在此方面使用您的帮助!使用Mac / Catalina和以下行:
curl --location --request PROPFIND 'http://192.168.1.102/DATALOG' \
--header 'Content-Type: text/xml' \
--header 'Depth: 1' \
--header 'Accept: */*' \
--data-raw '<?xml version="1.0" encoding="utf-8"?><D:propfind xmlns:D="DAV:"><D:prop><D:getlastmodified/><D:getcontentlength/><D:creationdate/><D:resourcetype/></D:prop></D:propfind>'
编辑: 这是一个示例响应,对我来说,似乎所有cr / lf都已到位,但我确实抱怨httpolice中缺少cr。
00000000 48 54 54 50 2f 31 2e 31 20 32 30 37 20 4d 75 6c HTTP/1.1 207 Mul
00000010 74 69 2d 53 74 61 74 75 73 0d 0a 53 65 72 76 65 ti-Statu s..Serve
00000020 72 3a 20 58 63 65 72 65 62 65 6c 6c 75 6d 2f 31 r: Xcere bellum/1
00000030 2e 30 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 .0..Conn ection:
00000040 63 6c 6f 73 65 0d 0a 43 6f 6e 74 65 6e 74 2d 54 close..C ontent-T
00000050 79 70 65 3a 20 74 65 78 74 2f 78 6d 6c 0d 0a 4c ype: tex t/xml..L
00000060 6f 63 61 74 69 6f 6e 3a 20 68 74 74 70 3a 2f 2f ocation: http://
00000070 31 39 32 2e 31 36 38 2e 31 2e 31 30 32 2f 44 43 192.168. 1.102/DC
00000080 49 4d 2f 0d 0a 54 72 61 6e 73 66 65 72 2d 45 6e IM/..Tra nsfer-En
00000090 63 6f 64 69 6e 67 3a 20 63 68 75 6e 6b 65 64 0d coding: chunked.
000000A0 0a 0d 0a ...
000000A3 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 27 31 <?xml ve rsion='1
000000B3 2e 30 27 20 65 6e 63 6f 64 69 6e 67 3d 27 75 74 .0' enco ding='ut
000000C3 66 2d 38 27 3f 3e 3c 44 3a 6d 75 6c 74 69 73 74 f-8'?><D :multist
000000D3 61 74 75 73 20 78 6d 6c 6e 73 3a 62 3d 27 75 72 atus xml ns:b='ur
000000E3 6e 3a 75 75 69 64 3a 63 32 66 34 31 30 31 30 2d n:uuid:c 2f41010-
000000F3 36 35 62 33 2d 31 31 64 31 2d 61 32 39 66 2d 30 65b3-11d 1-a29f-0
00000103 30 61 61 30 30 63 31 34 38 38 32 2f 27 20 78 6d 0aa00c14 882/' xm
00000113 6c 6e 73 3a 63 3d 27 78 6d 6c 3a 27 20 78 6d 6c lns:c='x ml:' xml
00000123 6e 73 3a 44 3d 27 44 41 56 3a 27 3e 3c 44 3a 72 ns:D='DA V:'><D:r
00000133 65 73 70 6f 6e 73 65 3e 3c 44 3a 68 72 65 66 3e esponse> <D:href>
00000143 68 74 74 70 3a 2f 2f 31 39 32 2e 31 36 38 2e 31 http://1 92.168.1
00000153 2e 31 30 32 2f 44 43 49 4d 2f 3c 2f 44 3a 68 72 .102/DCI M/</D:hr
00000163 65 66 3e 3c 44 3a 70 72 6f 70 73 74 61 74 3e 3c ef><D:pr opstat><
00000173 44 3a 70 72 6f 70 3e 3c 44 3a 72 65 73 6f 75 72 D:prop>< D:resour
00000183 63 65 74 79 70 65 3e 3c 44 3a 63 6f 6c 6c 65 63 cetype>< D:collec
00000193 74 69 6f 6e 2f 3e 3c 2f 44 3a 72 65 73 6f 75 72 tion/></ D:resour
000001A3 63 65 74 79 70 65 3e 3c 44 3a 67 65 74 63 6f 6e cetype>< D:getcon
000001B3 74 65 6e 74 6c 65 6e 67 74 68 3e 30 3c 2f 44 3a tentleng th>0</D:
000001C3 67 65 74 63 6f 6e 74 65 6e 74 6c 65 6e 67 74 68 getconte ntlength
000001D3 3e 3c 44 3a 69 73 72 65 61 64 6f 6e 6c 79 3e 30 ><D:isre adonly>0
000001E3 3c 2f 44 3a 69 73 72 65 61 64 6f 6e 6c 79 3e 3c </D:isre adonly><
000001F3 2f 44 3a 70 72 6f 70 3e 3c 44 3a 73 74 61 74 75 /D:prop> <D:statu
00000203 73 3e 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f s>HTTP/1 .1 200 O
00000213 4b 3c 2f 44 3a 73 74 61 74 75 73 3e 3c 2f 44 3a K</D:sta tus></D:
00000223 70 72 6f 70 73 74 61 74 3e 3c 44 3a 70 72 6f 70 propstat ><D:prop
00000233 73 74 61 74 3e 3c 44 3a 70 72 6f 70 3e 3c 44 3a stat><D: prop><D:
00000243 63 72 65 61 74 69 6f 6e 64 61 74 65 2f 3e 3c 44 creation date/><D
00000253 3a 67 65 74 6c 61 73 74 6d 6f 64 69 66 69 65 64 :getlast modified
00000263 2f 3e 3c 2f 44 3a 70 72 6f 70 3e 3c 44 3a 73 74 /></D:pr op><D:st
00000273 61 74 75 73 3e 48 54 54 50 2f 31 2e 31 20 34 30 atus>HTT P/1.1 40
00000283 34 20 4e 6f 74 20 46 6f 75 6e 64 3c 2f 44 3a 73 4 Not Fo und</D:s
00000293 74 61 74 75 73 3e 3c 2f 44 3a 70 72 6f 70 73 74 tatus></ D:propst
000002A3 61 74 3e 3c 2f 44 3a 72 65 73 70 6f 6e 73 65 3e at></D:r esponse>
000002B3 3c 44 3a 72 65 73 70 6f 6e 73 65 3e 3c 44 3a 68 <D:respo nse><D:h
000002C3 72 65 66 3e 68 74 74 70 3a 2f 2f 31 39 32 2e 31 ref>http ://192.1
000002D3 36 38 2e 31 2e 31 30 32 2f 44 43 49 4d 2f 31 30 68.1.102 /DCIM/10
000002E3 30 5f 5f 54 53 42 2f 3c 2f 44 3a 68 72 65 66 3e 0__TSB/< /D:href>
000002F3 3c 44 3a 70 72 6f 70 73 74 61 74 3e 3c 44 3a 70 <D:props tat><D:p
00000303 72 6f 70 3e 3c 44 3a 72 65 73 6f 75 72 63 65 74 rop><D:r esourcet
00000313 79 70 65 3e 3c 44 3a 63 6f 6c 6c 65 63 74 69 6f ype><D:c ollectio
00000323 6e 2f 3e 3c 2f 44 3a 72 65 73 6f 75 72 63 65 74 n/></D:r esourcet
00000333 79 70 65 3e 3c 44 3a 67 65 74 63 6f 6e 74 65 6e ype><D:g etconten
00000343 74 6c 65 6e 67 74 68 3e 30 3c 2f 44 3a 67 65 74 tlength> 0</D:get
00000353 63 6f 6e 74 65 6e 74 6c 65 6e 67 74 68 3e 3c 44 contentl ength><D
00000363 3a 69 73 72 65 61 64 6f 6e 6c 79 3e 30 3c 2f 44 :isreado nly>0</D
00000373 3a 69 73 72 65 61 64 6f 6e 6c 79 3e 3c 2f 44 3a :isreado nly></D:
00000383 70 72 6f 70 3e 3c 44 3a 73 74 61 74 75 73 3e 48 prop><D: status>H
00000393 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 3c 2f TTP/1.1 200 OK</
000003A3 44 3a 73 74 61 74 75 73 3e 3c 2f 44 3a 70 72 6f D:status ></D:pro
000003B3 70 73 74 61 74 3e 3c 44 3a 70 72 6f 70 73 74 61 pstat><D :propsta
000003C3 74 3e 3c 44 3a 70 72 6f 70 3e 3c 44 3a 63 72 65 t><D:pro p><D:cre
000003D3 61 74 69 6f 6e 64 61 74 65 2f 3e 3c 44 3a 67 65 ationdat e/><D:ge
000003E3 74 6c 61 73 74 6d 6f 64 69 66 69 65 64 2f 3e 3c tlastmod ified/><
000003F3 2f 44 3a 70 72 6f 70 3e 3c 44 3a 73 74 61 74 75 /D:prop> <D:statu
00000403 73 3e 48 54 54 50 2f 31 2e 31 20 34 30 34 20 4e s>HTTP/1 .1 404 N
00000413 6f 74 20 46 6f 75 6e 64 3c 2f 44 3a 73 74 61 74 ot Found </D:stat
00000423 75 73 3e 3c 2f 44 3a 70 72 6f 70 73 74 61 74 3e us></D:p ropstat>
00000433 3c 2f 44 3a 72 65 73 70 6f 6e 73 65 3e 3c 2f 44 </D:resp onse></D
00000443 3a 6d 75 6c 74 69 73 74 61 74 75 73 3e :multist atus>
解决方法
(这不是答案,这是一个调试请求,但是要发表评论太久了)
我的最佳猜测:您的WebDAV服务器未正确遵循HTTP协议的\ r \ n \ r \ n分隔符方案(可能是服务器错误?),您(或至少是我)可以通过使用以下命令创建请求来调试此问题netcat并转储对文件的响应并在十六进制编辑器中读取文件,为了获得服务器对文件的原始响应,请尝试:
的printf UFJPUEZJTkQgL0RBVEFMT0cgSFRUUC8xLjENCkhvc3Q6IDE5Mi4xNjguMS4xMDINClVzZXItQWdlbnQ6IGN1cmwvNy43MS4xDQpDb250ZW50LVR5cGU6IHRleHQveG1sDQpEZXB0aDogIDENCkFjY2VwdDogICovKg0KQ29udGVudC1MZW5ndGg6IDE3MA0KDQo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI / PjxEOnByb3BmaW5kIHhtbG5zOkQ9IkRBVjoiPjxEOnByb3A + PEQ6Z2V0bGFzdG1vZGlmaWVkLz48RDpnZXRjb250ZW50bGVuZ3RoLz48RDpjcmVhdGlvbmRhdGUvPjxEOnJlc291cmNldHlwZS8 + PC9EOnByb3A + PC9EOnByb3BmaW5kPg == | base64 -d | nc 192.168.1.102 80> server_response.bin
(PS,这是用Linux风格编写的,在标准Windows上不起作用,如果您的Windows上没有Linux终端,则可以从Cygwin获得linux-y终端或者,如果您使用的是Windows 10,则可以使用WSL,以上示例已在Cygwin上进行了测试,但可以在任何标准Linux终端上使用)
因为我猜想套接字没有自动关闭(可能是由于服务器上的“连接:保持活动”方案?),所以如果它没有终止,请让它运行至少10秒钟,然后再终止netcat自行终止
现在在十六进制编辑器中检查server_response.bin (我个人最喜欢的十六进制编辑器是HxD Hex Editor)
并检查server_response.bin,响应中是否包含Content-Length
标头?声明的Content-Length是否与实际内容长度匹配?响应的标头实际上是由响应的正文与0D 0A 0D 0A
字节分开的?
如果任何一个问题的答案是no
,则可能是您正在使用的WebDAV服务器中的一个错误,可以解释curl挂起(也许正在等待响应正文吗?),但也许可以上传您的server_response.bin,让我们在StackOverflow看看吗? (容易遗漏某些东西,特别是如果您没有在二进制/十六进制级别检查数据的经验)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。