Wiki source code of Creating a CalDAV collection
Last modified by Pascal Robert on 2013/11/18 06:15
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | To create a new CalDAV collection, you must use the [[MKCALENDAR>>url:http://tools.ietf.org/html/rfc4791#section-5.3.1||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]] HTTP method. You don't need to pass any properties in the request, you can create a collection with only: | ||
2 | |||
3 | (% class="syntaxhighlighter nogutter html" %) | ||
4 | ((( | ||
5 | |||
6 | |||
7 | |((( | ||
8 | (% class="container" title="Hint: double-click to select code" %) | ||
9 | ((( | ||
10 | (% class="line number1 index0 alt2" %) | ||
11 | ((( | ||
12 | {{code language="none"}} | ||
13 | MKCALENDAR /calendars/__uids__/D0CA5B92-B12F-4CC1-AB67-CCDC5ED665B4/mynewcalendar/ | ||
14 | {{/code}} | ||
15 | ))) | ||
16 | |||
17 | (% class="line number2 index1 alt1" %) | ||
18 | ((( | ||
19 | {{code language="none"}} | ||
20 | |||
21 | {{/code}} | ||
22 | ))) | ||
23 | |||
24 | (% class="line number3 index2 alt2" %) | ||
25 | ((( | ||
26 | {{code language="none"}} | ||
27 | <? | ||
28 | {{/code}} | ||
29 | |||
30 | {{code language="none"}} | ||
31 | xml | ||
32 | {{/code}} | ||
33 | |||
34 | |||
35 | |||
36 | {{code language="none"}} | ||
37 | version | ||
38 | {{/code}} | ||
39 | |||
40 | {{code language="none"}} | ||
41 | = | ||
42 | {{/code}} | ||
43 | |||
44 | {{code language="none"}} | ||
45 | "1.0" | ||
46 | {{/code}} | ||
47 | |||
48 | |||
49 | |||
50 | {{code language="none"}} | ||
51 | encoding | ||
52 | {{/code}} | ||
53 | |||
54 | {{code language="none"}} | ||
55 | = | ||
56 | {{/code}} | ||
57 | |||
58 | {{code language="none"}} | ||
59 | "utf-8" | ||
60 | {{/code}} | ||
61 | |||
62 | |||
63 | |||
64 | {{code language="none"}} | ||
65 | ?> | ||
66 | {{/code}} | ||
67 | ))) | ||
68 | |||
69 | (% class="line number4 index3 alt1" %) | ||
70 | ((( | ||
71 | {{code language="none"}} | ||
72 | < | ||
73 | {{/code}} | ||
74 | |||
75 | {{code language="none"}} | ||
76 | C:mkcalendar | ||
77 | {{/code}} | ||
78 | |||
79 | |||
80 | |||
81 | {{code language="none"}} | ||
82 | xmlns:D | ||
83 | {{/code}} | ||
84 | |||
85 | {{code language="none"}} | ||
86 | = | ||
87 | {{/code}} | ||
88 | |||
89 | {{code language="none"}} | ||
90 | "DAV:" | ||
91 | {{/code}} | ||
92 | |||
93 | |||
94 | |||
95 | {{code language="none"}} | ||
96 | xmlns:C | ||
97 | {{/code}} | ||
98 | |||
99 | {{code language="none"}} | ||
100 | = | ||
101 | {{/code}} | ||
102 | |||
103 | [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]] | ||
104 | |||
105 | {{code language="none"}} | ||
106 | "" | ||
107 | {{/code}} | ||
108 | |||
109 | {{code language="none"}} | ||
110 | > | ||
111 | {{/code}} | ||
112 | ))) | ||
113 | |||
114 | (% class="line number5 index4 alt2" %) | ||
115 | ((( | ||
116 | {{code language="none"}} | ||
117 | </ | ||
118 | {{/code}} | ||
119 | |||
120 | {{code language="none"}} | ||
121 | C:mkcalendar | ||
122 | {{/code}} | ||
123 | |||
124 | {{code language="none"}} | ||
125 | > | ||
126 | {{/code}} | ||
127 | ))) | ||
128 | ))) | ||
129 | ))) | ||
130 | |||
131 | |||
132 | ))) | ||
133 | |||
134 | If you do it with this simple request, the display name of the collection will be the last part of the URL (//mynewcalendar//). In the request, you can send most of the DAV and CalDAV [[attributes that applies to a calendar collection>>url:http://www.macti.ca/wiki/display/CAL/CalDAV+and+CardDAV+properties||style="text-decoration: underline;" shape="rect"]] (warning: some of the | ||
135 | |||
136 | A successful request will return a HTTP 201 status code. | ||
137 | |||
138 | (% class="syntaxhighlighter nogutter html" %) | ||
139 | ((( | ||
140 | |||
141 | |||
142 | |((( | ||
143 | (% class="container" title="Hint: double-click to select code" %) | ||
144 | ((( | ||
145 | (% class="line number1 index0 alt2" %) | ||
146 | ((( | ||
147 | {{code language="none"}} | ||
148 | HTTP/1.1 201 Created | ||
149 | {{/code}} | ||
150 | ))) | ||
151 | |||
152 | (% class="line number2 index1 alt1" %) | ||
153 | ((( | ||
154 | {{code language="none"}} | ||
155 | Content-Length: 0 | ||
156 | {{/code}} | ||
157 | ))) | ||
158 | |||
159 | (% class="line number3 index2 alt2" %) | ||
160 | ((( | ||
161 | {{code language="none"}} | ||
162 | Server: CalendarServer/4.2(CalendarServerv19.0.95) Twisted/12.0.0 TwistedWeb/9.0.0 | ||
163 | {{/code}} | ||
164 | ))) | ||
165 | |||
166 | (% class="line number4 index3 alt1" %) | ||
167 | ((( | ||
168 | {{code language="none"}} | ||
169 | Last-Modified: Thu, 21 Feb 2013 03:09:56 GMT | ||
170 | {{/code}} | ||
171 | ))) | ||
172 | |||
173 | (% class="line number5 index4 alt2" %) | ||
174 | ((( | ||
175 | {{code language="none"}} | ||
176 | DAV: 1, access-control, calendar-access, addressbook, extended-mkcol | ||
177 | {{/code}} | ||
178 | ))) | ||
179 | |||
180 | (% class="line number6 index5 alt1" %) | ||
181 | ((( | ||
182 | {{code language="none"}} | ||
183 | Etag: "25b621cd05498be5ab945acda80cf3dc" | ||
184 | {{/code}} | ||
185 | ))) | ||
186 | |||
187 | (% class="line number7 index6 alt2" %) | ||
188 | ((( | ||
189 | {{code language="none"}} | ||
190 | Date: Thu, 21 Feb 2013 03:09:56 GMT | ||
191 | {{/code}} | ||
192 | ))) | ||
193 | |||
194 | (% class="line number8 index7 alt1" %) | ||
195 | ((( | ||
196 | {{code language="none"}} | ||
197 | Connection: close, close | ||
198 | {{/code}} | ||
199 | ))) | ||
200 | ))) | ||
201 | ))) | ||
202 | |||
203 | |||
204 | ))) | ||
205 | |||
206 | So you only need to read the status code to know if the request was successful (you might want to store the value of the [[Etag>>url:http://tools.ietf.org/html/rfc2616#section-14.19||rel="nofollow" style="text-decoration: underline;" shape="rect" class="external-link"]] value if needed). | ||
207 | |||
208 | If you don't put a slash at the end of the URL, e.g.// /mycalendar// instead of ///mycalendar///, the status code will 301 (Moved Permanently), and the collection WON'T be created, so be sure you add the slash at the end. | ||
209 | |||
210 | If you don't get a 201 status code, it means you got an error. The following errors can occur: | ||
211 | |||
212 | * 403 (Forbidden) | ||
213 | * 409 (Conflict) | ||
214 | * 415 (Unsupported Media Type) | ||
215 | * 507 (Insufficient Storage) | ||
216 | * 207 (Multi-Status) | ||
217 | |||
218 | As a rule of thumb: | ||
219 | |||
220 | * If you get a 201 (Created) status code, it's a success, you don't have anything special to do. | ||
221 | * If you get a 3xx (redirection), resend the request by adding a / at the end of the URL. | ||
222 | * If you get a 4xx or a 207 status code, it's an error on the client side. If the content-type of the response is "text/xml", parse it to find the exact error. | ||
223 | * If you get a 5xx status code, it's an error on the server side. You can't do much except asking the manager of the server about the problem, or retry to send the request later. | ||
224 | |||
225 | A 405 (Unsupported Media Type) might happen if you send the wrong namespace in your request. Example: | ||
226 | |||
227 | (% class="syntaxhighlighter nogutter html" %) | ||
228 | ((( | ||
229 | |||
230 | |||
231 | |((( | ||
232 | (% class="container" title="Hint: double-click to select code" %) | ||
233 | ((( | ||
234 | (% class="line number1 index0 alt2" %) | ||
235 | ((( | ||
236 | {{code language="none"}} | ||
237 | MKCALENDAR /calendars/__uids__/D0CA5B92-B12F-4CC1-AB67-CCDC5ED665B4/mynewcalendar/ | ||
238 | {{/code}} | ||
239 | ))) | ||
240 | |||
241 | (% class="line number2 index1 alt1" %) | ||
242 | ((( | ||
243 | |||
244 | ))) | ||
245 | |||
246 | (% class="line number3 index2 alt2" %) | ||
247 | ((( | ||
248 | {{code language="none"}} | ||
249 | <? | ||
250 | {{/code}} | ||
251 | |||
252 | {{code language="none"}} | ||
253 | xml | ||
254 | {{/code}} | ||
255 | |||
256 | |||
257 | |||
258 | {{code language="none"}} | ||
259 | version | ||
260 | {{/code}} | ||
261 | |||
262 | {{code language="none"}} | ||
263 | = | ||
264 | {{/code}} | ||
265 | |||
266 | {{code language="none"}} | ||
267 | "1.0" | ||
268 | {{/code}} | ||
269 | |||
270 | |||
271 | |||
272 | {{code language="none"}} | ||
273 | encoding | ||
274 | {{/code}} | ||
275 | |||
276 | {{code language="none"}} | ||
277 | = | ||
278 | {{/code}} | ||
279 | |||
280 | {{code language="none"}} | ||
281 | "utf-8" | ||
282 | {{/code}} | ||
283 | |||
284 | |||
285 | |||
286 | {{code language="none"}} | ||
287 | ?> | ||
288 | {{/code}} | ||
289 | ))) | ||
290 | |||
291 | (% class="line number4 index3 alt1" %) | ||
292 | ((( | ||
293 | {{code language="none"}} | ||
294 | < | ||
295 | {{/code}} | ||
296 | |||
297 | {{code language="none"}} | ||
298 | C:mkcalendar | ||
299 | {{/code}} | ||
300 | |||
301 | |||
302 | |||
303 | {{code language="none"}} | ||
304 | xmlns:D | ||
305 | {{/code}} | ||
306 | |||
307 | {{code language="none"}} | ||
308 | = | ||
309 | {{/code}} | ||
310 | |||
311 | {{code language="none"}} | ||
312 | "DAV:" | ||
313 | {{/code}} | ||
314 | |||
315 | |||
316 | |||
317 | {{code language="none"}} | ||
318 | xmlns:C | ||
319 | {{/code}} | ||
320 | |||
321 | {{code language="none"}} | ||
322 | = | ||
323 | {{/code}} | ||
324 | |||
325 | [[urn:ietf:params:xml:ns:carddav>>url:http://urnietfparamsxml:ns:carddav||shape="rect"]] | ||
326 | |||
327 | {{code language="none"}} | ||
328 | "" | ||
329 | {{/code}} | ||
330 | |||
331 | {{code language="none"}} | ||
332 | > | ||
333 | {{/code}} | ||
334 | ))) | ||
335 | |||
336 | (% class="line number5 index4 alt2" %) | ||
337 | ((( | ||
338 | {{code language="none"}} | ||
339 | </ | ||
340 | {{/code}} | ||
341 | |||
342 | {{code language="none"}} | ||
343 | C:mkcalendar | ||
344 | {{/code}} | ||
345 | |||
346 | {{code language="none"}} | ||
347 | > | ||
348 | {{/code}} | ||
349 | ))) | ||
350 | |||
351 | (% class="line number6 index5 alt1" %) | ||
352 | ((( | ||
353 | {{code language="none"}} | ||
354 | |||
355 | {{/code}} | ||
356 | ))) | ||
357 | |||
358 | (% class="line number7 index6 alt2" %) | ||
359 | ((( | ||
360 | {{code language="none"}} | ||
361 | HTTP/1.1 415 Unsupported Media Type | ||
362 | {{/code}} | ||
363 | ))) | ||
364 | ))) | ||
365 | ))) | ||
366 | |||
367 | |||
368 | ))) | ||
369 | |||
370 | Where is the error in my request? It was using the Ca**rd**DAV namespace instead of the Ca**l**DAV namespace, hence the error. | ||
371 | |||
372 | A 403 (Forbidden) error might happen if you try to create a new collection on top of another collection. For example, if you sent the same MKCALENDAR requests two times: | ||
373 | |||
374 | (% class="syntaxhighlighter nogutter html" %) | ||
375 | ((( | ||
376 | |||
377 | |||
378 | |((( | ||
379 | (% class="container" title="Hint: double-click to select code" %) | ||
380 | ((( | ||
381 | (% class="line number1 index0 alt2" %) | ||
382 | ((( | ||
383 | {{code language="none"}} | ||
384 | MKCALENDAR /calendars/__uids__/D0CA5B92-B12F-4CC1-AB67-CCDC5ED665B4/mynewcalendar/ | ||
385 | {{/code}} | ||
386 | ))) | ||
387 | |||
388 | (% class="line number2 index1 alt1" %) | ||
389 | ((( | ||
390 | {{code language="none"}} | ||
391 | |||
392 | {{/code}} | ||
393 | |||
394 | |||
395 | ))) | ||
396 | |||
397 | (% class="line number3 index2 alt2" %) | ||
398 | ((( | ||
399 | {{code language="none"}} | ||
400 | <? | ||
401 | {{/code}} | ||
402 | |||
403 | {{code language="none"}} | ||
404 | xml | ||
405 | {{/code}} | ||
406 | |||
407 | |||
408 | |||
409 | {{code language="none"}} | ||
410 | version | ||
411 | {{/code}} | ||
412 | |||
413 | {{code language="none"}} | ||
414 | = | ||
415 | {{/code}} | ||
416 | |||
417 | {{code language="none"}} | ||
418 | "1.0" | ||
419 | {{/code}} | ||
420 | |||
421 | |||
422 | |||
423 | {{code language="none"}} | ||
424 | encoding | ||
425 | {{/code}} | ||
426 | |||
427 | {{code language="none"}} | ||
428 | = | ||
429 | {{/code}} | ||
430 | |||
431 | {{code language="none"}} | ||
432 | "utf-8" | ||
433 | {{/code}} | ||
434 | |||
435 | |||
436 | |||
437 | {{code language="none"}} | ||
438 | ?> | ||
439 | {{/code}} | ||
440 | ))) | ||
441 | |||
442 | (% class="line number4 index3 alt1" %) | ||
443 | ((( | ||
444 | {{code language="none"}} | ||
445 | < | ||
446 | {{/code}} | ||
447 | |||
448 | {{code language="none"}} | ||
449 | C:mkcalendar | ||
450 | {{/code}} | ||
451 | |||
452 | |||
453 | |||
454 | {{code language="none"}} | ||
455 | xmlns:D | ||
456 | {{/code}} | ||
457 | |||
458 | {{code language="none"}} | ||
459 | = | ||
460 | {{/code}} | ||
461 | |||
462 | {{code language="none"}} | ||
463 | "DAV:" | ||
464 | {{/code}} | ||
465 | |||
466 | |||
467 | |||
468 | {{code language="none"}} | ||
469 | xmlns:C | ||
470 | {{/code}} | ||
471 | |||
472 | {{code language="none"}} | ||
473 | = | ||
474 | {{/code}} | ||
475 | |||
476 | [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]] | ||
477 | |||
478 | {{code language="none"}} | ||
479 | "" | ||
480 | {{/code}} | ||
481 | |||
482 | {{code language="none"}} | ||
483 | > | ||
484 | {{/code}} | ||
485 | ))) | ||
486 | |||
487 | (% class="line number5 index4 alt2" %) | ||
488 | ((( | ||
489 | {{code language="none"}} | ||
490 | </ | ||
491 | {{/code}} | ||
492 | |||
493 | {{code language="none"}} | ||
494 | C:mkcalendar | ||
495 | {{/code}} | ||
496 | |||
497 | {{code language="none"}} | ||
498 | > | ||
499 | {{/code}} | ||
500 | ))) | ||
501 | |||
502 | (% class="line number6 index5 alt1" %) | ||
503 | ((( | ||
504 | {{code language="none"}} | ||
505 | |||
506 | {{/code}} | ||
507 | ))) | ||
508 | |||
509 | (% class="line number7 index6 alt2" %) | ||
510 | ((( | ||
511 | {{code language="none"}} | ||
512 | MKCALENDAR /calendars/__uids__/D0CA5B92-B12F-4CC1-AB67-CCDC5ED665B4/mynewcalendar/ | ||
513 | {{/code}} | ||
514 | ))) | ||
515 | |||
516 | (% class="line number8 index7 alt1" %) | ||
517 | ((( | ||
518 | {{code language="none"}} | ||
519 | |||
520 | {{/code}} | ||
521 | |||
522 | |||
523 | ))) | ||
524 | |||
525 | (% class="line number9 index8 alt2" %) | ||
526 | ((( | ||
527 | {{code language="none"}} | ||
528 | <? | ||
529 | {{/code}} | ||
530 | |||
531 | {{code language="none"}} | ||
532 | xml | ||
533 | {{/code}} | ||
534 | |||
535 | |||
536 | |||
537 | {{code language="none"}} | ||
538 | version | ||
539 | {{/code}} | ||
540 | |||
541 | {{code language="none"}} | ||
542 | = | ||
543 | {{/code}} | ||
544 | |||
545 | {{code language="none"}} | ||
546 | "1.0" | ||
547 | {{/code}} | ||
548 | |||
549 | |||
550 | |||
551 | {{code language="none"}} | ||
552 | encoding | ||
553 | {{/code}} | ||
554 | |||
555 | {{code language="none"}} | ||
556 | = | ||
557 | {{/code}} | ||
558 | |||
559 | {{code language="none"}} | ||
560 | "utf-8" | ||
561 | {{/code}} | ||
562 | |||
563 | |||
564 | |||
565 | {{code language="none"}} | ||
566 | ?> | ||
567 | {{/code}} | ||
568 | ))) | ||
569 | |||
570 | (% class="line number10 index9 alt1" %) | ||
571 | ((( | ||
572 | {{code language="none"}} | ||
573 | < | ||
574 | {{/code}} | ||
575 | |||
576 | {{code language="none"}} | ||
577 | C:mkcalendar | ||
578 | {{/code}} | ||
579 | |||
580 | |||
581 | |||
582 | {{code language="none"}} | ||
583 | xmlns:D | ||
584 | {{/code}} | ||
585 | |||
586 | {{code language="none"}} | ||
587 | = | ||
588 | {{/code}} | ||
589 | |||
590 | {{code language="none"}} | ||
591 | "DAV:" | ||
592 | {{/code}} | ||
593 | |||
594 | |||
595 | |||
596 | {{code language="none"}} | ||
597 | xmlns:C | ||
598 | {{/code}} | ||
599 | |||
600 | {{code language="none"}} | ||
601 | = | ||
602 | {{/code}} | ||
603 | |||
604 | [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]] | ||
605 | |||
606 | {{code language="none"}} | ||
607 | "" | ||
608 | {{/code}} | ||
609 | |||
610 | {{code language="none"}} | ||
611 | > | ||
612 | {{/code}} | ||
613 | ))) | ||
614 | |||
615 | (% class="line number11 index10 alt2" %) | ||
616 | ((( | ||
617 | {{code language="none"}} | ||
618 | </ | ||
619 | {{/code}} | ||
620 | |||
621 | {{code language="none"}} | ||
622 | C:mkcalendar | ||
623 | {{/code}} | ||
624 | |||
625 | {{code language="none"}} | ||
626 | > | ||
627 | {{/code}} | ||
628 | ))) | ||
629 | ))) | ||
630 | ))) | ||
631 | |||
632 | |||
633 | ))) | ||
634 | |||
635 | The last one will return: | ||
636 | |||
637 | (% class="syntaxhighlighter nogutter html" %) | ||
638 | ((( | ||
639 | |||
640 | |||
641 | |((( | ||
642 | (% class="container" title="Hint: double-click to select code" %) | ||
643 | ((( | ||
644 | (% class="line number1 index0 alt2" %) | ||
645 | ((( | ||
646 | {{code language="none"}} | ||
647 | HTTP/1.1 403 Forbidden | ||
648 | {{/code}} | ||
649 | ))) | ||
650 | |||
651 | (% class="line number2 index1 alt1" %) | ||
652 | ((( | ||
653 | {{code language="none"}} | ||
654 | Content-Length: 215 | ||
655 | {{/code}} | ||
656 | ))) | ||
657 | |||
658 | (% class="line number3 index2 alt2" %) | ||
659 | ((( | ||
660 | {{code language="none"}} | ||
661 | Date: Thu, 21 Feb 2013 02:49:23 GMT | ||
662 | {{/code}} | ||
663 | ))) | ||
664 | |||
665 | (% class="line number4 index3 alt1" %) | ||
666 | ((( | ||
667 | {{code language="none"}} | ||
668 | DAV: 1, access-control, calendar-access, calendar-schedule, calendar-auto-schedule, calendar-availability, inbox-availability, calendar-proxy, calendarserver-private-events, calendarserver-private-comments, calendarserver-sharing, calendarserver-sharing-no-scheduling, calendar-query-extended, calendar-default-alarms, addressbook, extended-mkcol, calendarserver-principal-property-search, calendarserver-principal-search | ||
669 | {{/code}} | ||
670 | ))) | ||
671 | |||
672 | (% class="line number5 index4 alt2" %) | ||
673 | ((( | ||
674 | {{code language="none"}} | ||
675 | Content-Type: text/xml | ||
676 | {{/code}} | ||
677 | ))) | ||
678 | |||
679 | (% class="line number6 index5 alt1" %) | ||
680 | ((( | ||
681 | {{code language="none"}} | ||
682 | Server: CalendarServer/4.2(CalendarServerv19.0.95) Twisted/12.0.0 TwistedWeb/9.0.0 | ||
683 | {{/code}} | ||
684 | ))) | ||
685 | |||
686 | (% class="line number7 index6 alt2" %) | ||
687 | ((( | ||
688 | {{code language="none"}} | ||
689 | Connection: close | ||
690 | {{/code}} | ||
691 | ))) | ||
692 | |||
693 | (% class="line number8 index7 alt1" %) | ||
694 | ((( | ||
695 | {{code language="none"}} | ||
696 | <? | ||
697 | {{/code}} | ||
698 | |||
699 | {{code language="none"}} | ||
700 | xml | ||
701 | {{/code}} | ||
702 | |||
703 | |||
704 | |||
705 | {{code language="none"}} | ||
706 | version | ||
707 | {{/code}} | ||
708 | |||
709 | {{code language="none"}} | ||
710 | = | ||
711 | {{/code}} | ||
712 | |||
713 | {{code language="none"}} | ||
714 | '1.0' | ||
715 | {{/code}} | ||
716 | |||
717 | |||
718 | |||
719 | {{code language="none"}} | ||
720 | encoding | ||
721 | {{/code}} | ||
722 | |||
723 | {{code language="none"}} | ||
724 | = | ||
725 | {{/code}} | ||
726 | |||
727 | {{code language="none"}} | ||
728 | 'UTF-8' | ||
729 | {{/code}} | ||
730 | |||
731 | {{code language="none"}} | ||
732 | ?> | ||
733 | {{/code}} | ||
734 | ))) | ||
735 | |||
736 | (% class="line number9 index8 alt2" %) | ||
737 | ((( | ||
738 | {{code language="none"}} | ||
739 | < | ||
740 | {{/code}} | ||
741 | |||
742 | {{code language="none"}} | ||
743 | error | ||
744 | {{/code}} | ||
745 | |||
746 | |||
747 | |||
748 | {{code language="none"}} | ||
749 | xmlns | ||
750 | {{/code}} | ||
751 | |||
752 | {{code language="none"}} | ||
753 | = | ||
754 | {{/code}} | ||
755 | |||
756 | {{code language="none"}} | ||
757 | 'DAV:' | ||
758 | {{/code}} | ||
759 | |||
760 | {{code language="none"}} | ||
761 | > | ||
762 | {{/code}} | ||
763 | ))) | ||
764 | |||
765 | (% class="line number10 index9 alt1" %) | ||
766 | ((( | ||
767 | {{code language="none"}} | ||
768 | |||
769 | {{/code}} | ||
770 | |||
771 | {{code language="none"}} | ||
772 | < | ||
773 | {{/code}} | ||
774 | |||
775 | {{code language="none"}} | ||
776 | resource-must-be-null | ||
777 | {{/code}} | ||
778 | |||
779 | {{code language="none"}} | ||
780 | /> | ||
781 | {{/code}} | ||
782 | ))) | ||
783 | |||
784 | (% class="line number11 index10 alt2" %) | ||
785 | ((( | ||
786 | {{code language="none"}} | ||
787 | |||
788 | {{/code}} | ||
789 | |||
790 | {{code language="none"}} | ||
791 | < | ||
792 | {{/code}} | ||
793 | |||
794 | {{code language="none"}} | ||
795 | error-description | ||
796 | {{/code}} | ||
797 | |||
798 | |||
799 | |||
800 | {{code language="none"}} | ||
801 | xmlns | ||
802 | {{/code}} | ||
803 | |||
804 | {{code language="none"}} | ||
805 | = | ||
806 | {{/code}} | ||
807 | |||
808 | http:~/~/twistedmatrix.com/xml_namespace/dav/' | ||
809 | |||
810 | {{code language="none"}} | ||
811 | ' | ||
812 | {{/code}} | ||
813 | |||
814 | {{code language="none"}} | ||
815 | >Resource already exists</ | ||
816 | {{/code}} | ||
817 | |||
818 | {{code language="none"}} | ||
819 | error-description | ||
820 | {{/code}} | ||
821 | |||
822 | {{code language="none"}} | ||
823 | > | ||
824 | {{/code}} | ||
825 | ))) | ||
826 | |||
827 | (% class="line number12 index11 alt1" %) | ||
828 | ((( | ||
829 | {{code language="none"}} | ||
830 | </ | ||
831 | {{/code}} | ||
832 | |||
833 | {{code language="none"}} | ||
834 | error | ||
835 | {{/code}} | ||
836 | |||
837 | {{code language="none"}} | ||
838 | > | ||
839 | {{/code}} | ||
840 | ))) | ||
841 | ))) | ||
842 | ))) | ||
843 | |||
844 | |||
845 | ))) | ||
846 | |||
847 | The following errors might be present in the body of the response: | ||
848 | |||
849 | |||
850 | |||
851 | * //resource-must-be-null// (namespace: DAV): you can't create this collection at this URL. As we saw in the example just above, you will get this error if you try to create a collection on an already existing collection. | ||
852 | * //calendar-collection-location-ok// (namespace: [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]): identify a location where a calendar collection. You will get this error if you try to create a calendar collection inside another calendar collection, which isn't allowed in CalDAV. | ||
853 | * //needs-privilege// (namespace: DAV): you don't have privilege to create this collection at the specified URL. | ||
854 | * //valid-calendar-data// (namespace: [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]): you must pass a valid VTIMEZONE component for the //calendar-timezone// property. | ||
855 | * //initialize-calendar-collection// (namespace: [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]]): the resourcetype property must be of both //DAV:collection// and //[[urn:ietf:params:xml:ns:caldav:calendar>>url:http://urnietfparamsxml:ns:caldav:calendar||shape="rect"]]//. | ||
856 | |||
857 | If you get a 207 (Multi-Status) for the response, you have to parse each <response> element to analyse each error. For example, I tried to create a collection that only supports VJOURNAL component: | ||
858 | |||
859 | (% class="syntaxhighlighter nogutter html" %) | ||
860 | ((( | ||
861 | |||
862 | |||
863 | |((( | ||
864 | (% class="container" title="Hint: double-click to select code" %) | ||
865 | ((( | ||
866 | (% class="line number1 index0 alt2" %) | ||
867 | ((( | ||
868 | {{code language="none"}} | ||
869 | <? | ||
870 | {{/code}} | ||
871 | |||
872 | {{code language="none"}} | ||
873 | xml | ||
874 | {{/code}} | ||
875 | |||
876 | |||
877 | |||
878 | {{code language="none"}} | ||
879 | version | ||
880 | {{/code}} | ||
881 | |||
882 | {{code language="none"}} | ||
883 | = | ||
884 | {{/code}} | ||
885 | |||
886 | {{code language="none"}} | ||
887 | "1.0" | ||
888 | {{/code}} | ||
889 | |||
890 | |||
891 | |||
892 | {{code language="none"}} | ||
893 | encoding | ||
894 | {{/code}} | ||
895 | |||
896 | {{code language="none"}} | ||
897 | = | ||
898 | {{/code}} | ||
899 | |||
900 | {{code language="none"}} | ||
901 | "utf-8" | ||
902 | {{/code}} | ||
903 | |||
904 | |||
905 | |||
906 | {{code language="none"}} | ||
907 | ?> | ||
908 | {{/code}} | ||
909 | ))) | ||
910 | |||
911 | (% class="line number2 index1 alt1" %) | ||
912 | ((( | ||
913 | {{code language="none"}} | ||
914 | < | ||
915 | {{/code}} | ||
916 | |||
917 | {{code language="none"}} | ||
918 | C:mkcalendar | ||
919 | {{/code}} | ||
920 | |||
921 | |||
922 | |||
923 | {{code language="none"}} | ||
924 | xmlns:D | ||
925 | {{/code}} | ||
926 | |||
927 | {{code language="none"}} | ||
928 | = | ||
929 | {{/code}} | ||
930 | |||
931 | {{code language="none"}} | ||
932 | "DAV:" | ||
933 | {{/code}} | ||
934 | |||
935 | |||
936 | |||
937 | {{code language="none"}} | ||
938 | xmlns:C | ||
939 | {{/code}} | ||
940 | |||
941 | {{code language="none"}} | ||
942 | = | ||
943 | {{/code}} | ||
944 | |||
945 | [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]] | ||
946 | |||
947 | {{code language="none"}} | ||
948 | "" | ||
949 | {{/code}} | ||
950 | |||
951 | {{code language="none"}} | ||
952 | > | ||
953 | {{/code}} | ||
954 | ))) | ||
955 | |||
956 | (% class="line number3 index2 alt2" %) | ||
957 | ((( | ||
958 | {{code language="none"}} | ||
959 | < | ||
960 | {{/code}} | ||
961 | |||
962 | {{code language="none"}} | ||
963 | D:set | ||
964 | {{/code}} | ||
965 | |||
966 | {{code language="none"}} | ||
967 | > | ||
968 | {{/code}} | ||
969 | ))) | ||
970 | |||
971 | (% class="line number4 index3 alt1" %) | ||
972 | ((( | ||
973 | {{code language="none"}} | ||
974 | < | ||
975 | {{/code}} | ||
976 | |||
977 | {{code language="none"}} | ||
978 | D:prop | ||
979 | {{/code}} | ||
980 | |||
981 | {{code language="none"}} | ||
982 | > | ||
983 | {{/code}} | ||
984 | ))) | ||
985 | |||
986 | (% class="line number5 index4 alt2" %) | ||
987 | ((( | ||
988 | {{code language="none"}} | ||
989 | < | ||
990 | {{/code}} | ||
991 | |||
992 | {{code language="none"}} | ||
993 | C:supported-calendar-component-set | ||
994 | {{/code}} | ||
995 | |||
996 | {{code language="none"}} | ||
997 | > | ||
998 | {{/code}} | ||
999 | ))) | ||
1000 | |||
1001 | (% class="line number6 index5 alt1" %) | ||
1002 | ((( | ||
1003 | {{code language="none"}} | ||
1004 | < | ||
1005 | {{/code}} | ||
1006 | |||
1007 | {{code language="none"}} | ||
1008 | C:comp | ||
1009 | {{/code}} | ||
1010 | |||
1011 | |||
1012 | |||
1013 | {{code language="none"}} | ||
1014 | name | ||
1015 | {{/code}} | ||
1016 | |||
1017 | {{code language="none"}} | ||
1018 | = | ||
1019 | {{/code}} | ||
1020 | |||
1021 | {{code language="none"}} | ||
1022 | "VJOURNAL" | ||
1023 | {{/code}} | ||
1024 | |||
1025 | {{code language="none"}} | ||
1026 | /> | ||
1027 | {{/code}} | ||
1028 | ))) | ||
1029 | |||
1030 | (% class="line number7 index6 alt2" %) | ||
1031 | ((( | ||
1032 | {{code language="none"}} | ||
1033 | </ | ||
1034 | {{/code}} | ||
1035 | |||
1036 | {{code language="none"}} | ||
1037 | C:supported-calendar-component-set | ||
1038 | {{/code}} | ||
1039 | |||
1040 | {{code language="none"}} | ||
1041 | > | ||
1042 | {{/code}} | ||
1043 | ))) | ||
1044 | |||
1045 | (% class="line number8 index7 alt1" %) | ||
1046 | ((( | ||
1047 | {{code language="none"}} | ||
1048 | </ | ||
1049 | {{/code}} | ||
1050 | |||
1051 | {{code language="none"}} | ||
1052 | D:prop | ||
1053 | {{/code}} | ||
1054 | |||
1055 | {{code language="none"}} | ||
1056 | > | ||
1057 | {{/code}} | ||
1058 | ))) | ||
1059 | |||
1060 | (% class="line number9 index8 alt2" %) | ||
1061 | ((( | ||
1062 | {{code language="none"}} | ||
1063 | </ | ||
1064 | {{/code}} | ||
1065 | |||
1066 | {{code language="none"}} | ||
1067 | D:set | ||
1068 | {{/code}} | ||
1069 | |||
1070 | {{code language="none"}} | ||
1071 | > | ||
1072 | {{/code}} | ||
1073 | ))) | ||
1074 | |||
1075 | (% class="line number10 index9 alt1" %) | ||
1076 | ((( | ||
1077 | {{code language="none"}} | ||
1078 | </ | ||
1079 | {{/code}} | ||
1080 | |||
1081 | {{code language="none"}} | ||
1082 | C:mkcalendar | ||
1083 | {{/code}} | ||
1084 | |||
1085 | {{code language="none"}} | ||
1086 | > | ||
1087 | {{/code}} | ||
1088 | ))) | ||
1089 | ))) | ||
1090 | ))) | ||
1091 | |||
1092 | |||
1093 | ))) | ||
1094 | |||
1095 | VJOURNAL is not supported as a component type on calendar or tasks collections, hence the response will be of the Multi-Status type: | ||
1096 | |||
1097 | (% class="syntaxhighlighter nogutter html" %) | ||
1098 | ((( | ||
1099 | |||
1100 | |||
1101 | |((( | ||
1102 | (% class="container" title="Hint: double-click to select code" %) | ||
1103 | ((( | ||
1104 | (% class="line number1 index0 alt2" %) | ||
1105 | ((( | ||
1106 | {{code language="none"}} | ||
1107 | HTTP/1.1 207 Multi-Status | ||
1108 | {{/code}} | ||
1109 | ))) | ||
1110 | |||
1111 | (% class="line number2 index1 alt1" %) | ||
1112 | ((( | ||
1113 | |||
1114 | ))) | ||
1115 | |||
1116 | (% class="line number3 index2 alt2" %) | ||
1117 | ((( | ||
1118 | {{code language="none"}} | ||
1119 | <? | ||
1120 | {{/code}} | ||
1121 | |||
1122 | {{code language="none"}} | ||
1123 | xml | ||
1124 | {{/code}} | ||
1125 | |||
1126 | |||
1127 | |||
1128 | {{code language="none"}} | ||
1129 | version | ||
1130 | {{/code}} | ||
1131 | |||
1132 | {{code language="none"}} | ||
1133 | = | ||
1134 | {{/code}} | ||
1135 | |||
1136 | {{code language="none"}} | ||
1137 | '1.0' | ||
1138 | {{/code}} | ||
1139 | |||
1140 | |||
1141 | |||
1142 | {{code language="none"}} | ||
1143 | encoding | ||
1144 | {{/code}} | ||
1145 | |||
1146 | {{code language="none"}} | ||
1147 | = | ||
1148 | {{/code}} | ||
1149 | |||
1150 | {{code language="none"}} | ||
1151 | 'UTF-8' | ||
1152 | {{/code}} | ||
1153 | |||
1154 | {{code language="none"}} | ||
1155 | ?> | ||
1156 | {{/code}} | ||
1157 | ))) | ||
1158 | |||
1159 | (% class="line number4 index3 alt1" %) | ||
1160 | ((( | ||
1161 | {{code language="none"}} | ||
1162 | < | ||
1163 | {{/code}} | ||
1164 | |||
1165 | {{code language="none"}} | ||
1166 | multistatus | ||
1167 | {{/code}} | ||
1168 | |||
1169 | |||
1170 | |||
1171 | {{code language="none"}} | ||
1172 | xmlns | ||
1173 | {{/code}} | ||
1174 | |||
1175 | {{code language="none"}} | ||
1176 | = | ||
1177 | {{/code}} | ||
1178 | |||
1179 | {{code language="none"}} | ||
1180 | 'DAV:' | ||
1181 | {{/code}} | ||
1182 | |||
1183 | {{code language="none"}} | ||
1184 | > | ||
1185 | {{/code}} | ||
1186 | ))) | ||
1187 | |||
1188 | (% class="line number5 index4 alt2" %) | ||
1189 | ((( | ||
1190 | {{code language="none"}} | ||
1191 | |||
1192 | {{/code}} | ||
1193 | |||
1194 | {{code language="none"}} | ||
1195 | < | ||
1196 | {{/code}} | ||
1197 | |||
1198 | {{code language="none"}} | ||
1199 | response | ||
1200 | {{/code}} | ||
1201 | |||
1202 | {{code language="none"}} | ||
1203 | > | ||
1204 | {{/code}} | ||
1205 | ))) | ||
1206 | |||
1207 | (% class="line number6 index5 alt1" %) | ||
1208 | ((( | ||
1209 | {{code language="none"}} | ||
1210 | |||
1211 | {{/code}} | ||
1212 | |||
1213 | {{code language="none"}} | ||
1214 | < | ||
1215 | {{/code}} | ||
1216 | |||
1217 | {{code language="none"}} | ||
1218 | href | ||
1219 | {{/code}} | ||
1220 | |||
1221 | {{code language="none"}} | ||
1222 | >/calendars/__uids__/D0CA5B92-B12F-4CC1-AB67-CCDC5ED665B4/calendrier6/</ | ||
1223 | {{/code}} | ||
1224 | |||
1225 | {{code language="none"}} | ||
1226 | href | ||
1227 | {{/code}} | ||
1228 | |||
1229 | {{code language="none"}} | ||
1230 | > | ||
1231 | {{/code}} | ||
1232 | ))) | ||
1233 | |||
1234 | (% class="line number7 index6 alt2" %) | ||
1235 | ((( | ||
1236 | {{code language="none"}} | ||
1237 | |||
1238 | {{/code}} | ||
1239 | |||
1240 | {{code language="none"}} | ||
1241 | < | ||
1242 | {{/code}} | ||
1243 | |||
1244 | {{code language="none"}} | ||
1245 | propstat | ||
1246 | {{/code}} | ||
1247 | |||
1248 | {{code language="none"}} | ||
1249 | > | ||
1250 | {{/code}} | ||
1251 | ))) | ||
1252 | |||
1253 | (% class="line number8 index7 alt1" %) | ||
1254 | ((( | ||
1255 | {{code language="none"}} | ||
1256 | |||
1257 | {{/code}} | ||
1258 | |||
1259 | {{code language="none"}} | ||
1260 | < | ||
1261 | {{/code}} | ||
1262 | |||
1263 | {{code language="none"}} | ||
1264 | prop | ||
1265 | {{/code}} | ||
1266 | |||
1267 | {{code language="none"}} | ||
1268 | > | ||
1269 | {{/code}} | ||
1270 | ))) | ||
1271 | |||
1272 | (% class="line number9 index8 alt2" %) | ||
1273 | ((( | ||
1274 | {{code language="none"}} | ||
1275 | |||
1276 | {{/code}} | ||
1277 | |||
1278 | {{code language="none"}} | ||
1279 | < | ||
1280 | {{/code}} | ||
1281 | |||
1282 | {{code language="none"}} | ||
1283 | supported-calendar-component-set | ||
1284 | {{/code}} | ||
1285 | |||
1286 | |||
1287 | |||
1288 | {{code language="none"}} | ||
1289 | xmlns | ||
1290 | {{/code}} | ||
1291 | |||
1292 | {{code language="none"}} | ||
1293 | = | ||
1294 | {{/code}} | ||
1295 | |||
1296 | [[urn:ietf:params:xml:ns:caldav>>url:http://urnietfparamsxml:ns:caldav||shape="rect"]] | ||
1297 | |||
1298 | {{code language="none"}} | ||
1299 | '' | ||
1300 | {{/code}} | ||
1301 | |||
1302 | {{code language="none"}} | ||
1303 | /> | ||
1304 | {{/code}} | ||
1305 | ))) | ||
1306 | |||
1307 | (% class="line number10 index9 alt1" %) | ||
1308 | ((( | ||
1309 | {{code language="none"}} | ||
1310 | |||
1311 | {{/code}} | ||
1312 | |||
1313 | {{code language="none"}} | ||
1314 | </ | ||
1315 | {{/code}} | ||
1316 | |||
1317 | {{code language="none"}} | ||
1318 | prop | ||
1319 | {{/code}} | ||
1320 | |||
1321 | {{code language="none"}} | ||
1322 | > | ||
1323 | {{/code}} | ||
1324 | ))) | ||
1325 | |||
1326 | (% class="line number11 index10 alt2" %) | ||
1327 | ((( | ||
1328 | {{code language="none"}} | ||
1329 | |||
1330 | {{/code}} | ||
1331 | |||
1332 | {{code language="none"}} | ||
1333 | < | ||
1334 | {{/code}} | ||
1335 | |||
1336 | {{code language="none"}} | ||
1337 | status | ||
1338 | {{/code}} | ||
1339 | |||
1340 | {{code language="none"}} | ||
1341 | >HTTP/1.1 403 Forbidden</ | ||
1342 | {{/code}} | ||
1343 | |||
1344 | {{code language="none"}} | ||
1345 | status | ||
1346 | {{/code}} | ||
1347 | |||
1348 | {{code language="none"}} | ||
1349 | > | ||
1350 | {{/code}} | ||
1351 | ))) | ||
1352 | |||
1353 | (% class="line number12 index11 alt1" %) | ||
1354 | ((( | ||
1355 | {{code language="none"}} | ||
1356 | |||
1357 | {{/code}} | ||
1358 | |||
1359 | {{code language="none"}} | ||
1360 | < | ||
1361 | {{/code}} | ||
1362 | |||
1363 | {{code language="none"}} | ||
1364 | responsedescription | ||
1365 | {{/code}} | ||
1366 | |||
1367 | {{code language="none"}} | ||
1368 | >Invalid CALDAV:supported-calendar-component-set</ | ||
1369 | {{/code}} | ||
1370 | |||
1371 | {{code language="none"}} | ||
1372 | responsedescription | ||
1373 | {{/code}} | ||
1374 | |||
1375 | {{code language="none"}} | ||
1376 | > | ||
1377 | {{/code}} | ||
1378 | ))) | ||
1379 | |||
1380 | (% class="line number13 index12 alt2" %) | ||
1381 | ((( | ||
1382 | {{code language="none"}} | ||
1383 | |||
1384 | {{/code}} | ||
1385 | |||
1386 | {{code language="none"}} | ||
1387 | </ | ||
1388 | {{/code}} | ||
1389 | |||
1390 | {{code language="none"}} | ||
1391 | propstat | ||
1392 | {{/code}} | ||
1393 | |||
1394 | {{code language="none"}} | ||
1395 | > | ||
1396 | {{/code}} | ||
1397 | ))) | ||
1398 | |||
1399 | (% class="line number14 index13 alt1" %) | ||
1400 | ((( | ||
1401 | {{code language="none"}} | ||
1402 | |||
1403 | {{/code}} | ||
1404 | |||
1405 | {{code language="none"}} | ||
1406 | </ | ||
1407 | {{/code}} | ||
1408 | |||
1409 | {{code language="none"}} | ||
1410 | response | ||
1411 | {{/code}} | ||
1412 | |||
1413 | {{code language="none"}} | ||
1414 | > | ||
1415 | {{/code}} | ||
1416 | ))) | ||
1417 | |||
1418 | (% class="line number15 index14 alt2" %) | ||
1419 | ((( | ||
1420 | {{code language="none"}} | ||
1421 | </ | ||
1422 | {{/code}} | ||
1423 | |||
1424 | {{code language="none"}} | ||
1425 | multistatus | ||
1426 | {{/code}} | ||
1427 | |||
1428 | {{code language="none"}} | ||
1429 | > | ||
1430 | {{/code}} | ||
1431 | ))) | ||
1432 | ))) | ||
1433 | ))) | ||
1434 | ))) |