我将如何在PHP中重新创建以下curl语句?
curl http://www.example.com/path/to/folder/ -X SEARCH -d @dasl.xml
到目前为止,这是我所拥有的,而“ dasl.xml”文件就是让我绊倒的东西。
$ch = curl_init("http://www.example.com/path/to/folder/");
$fp = fopen("webdav.xml", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "SEARCH");
curl_exec($ch);
curl_close($ch);
fclose($fp);
dasl.xml文件包含用于查询WebDAV的XML。有没有可以用来传递该文件的选项?还是有一种方法可以将文件的内容作为字符串或其他形式传递?
我当前收到的错误声明是
DaslStatement:267-SAX解析器错误文件的结尾过早。
谢谢您的帮助。
更新:
这是一个示例dasl.xml文件:
<d:searchrequest xmlns:d="DAV:">
<d:basicsearch>
<d:select>
<d:prop><d:getcontentlength/></d:prop>
</d:select>
<d:from>
<d:scope>
<d:href>/container1/</d:href>
<d:depth>infinity</d:depth>
</d:scope>
</d:from>
<d:where>
<d:gt>
<d:prop><d:getcontentlength/></d:prop>
<d:literal>10000</d:literal>
</d:gt>
</d:where>
<d:orderby>
<d:order>
<d:prop><d:getcontentlength/></d:prop>
<d:ascending/>
</d:order>
</d:orderby>
</d:basicsearch>
</d:searchrequest>
有关DASL的更多信息,请参见:http://greenbytes.de/tech/webdav/rfc5323.html和[http://www.webdav.org/dasl/][2]
最佳答案
您可以在自定义上下文中使用file_get_contents
。因此,您不需要为此使用cURL。类似于以下内容:
$url = 'http://www.example.com/path/to/folder/';
$body = file_get_contents('dasl.xml');
$context = stream_context_create(array(
'http' => array(
'method' => 'SEARCH',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $body,
)
));
$response = file_get_contents($url, false, $context);