我正在使用REST API,除其他外,它使用DELETE
方法,如下所示:
DELETE /resources/whatever/items/123
要使用PHP访问它,我正在使用这样的cURL:
self::$curl = curl_init();
curl_setopt_array(self::$curl, array(
CURLOPT_AUTOREFERER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
));
如您所见,我的cURL实例是静态的,将在后续调用中重用。在“内置”请求方法之间切换时,这可以正常工作。例如,在我的get()
方法中,我做了类似的事情:
curl_setopt_array(self::$curl, array(
CURLOPT_HTTPGET => true,
CURLOPT_URL => self::BASE . 'whatever',
));
然后运行curl_exec()
。通过CURLOPT_HTTPGET
明确设置请求方法,将清除可能的先前CURLOPT_POST
。
但是,设置CURLOPT_CUSTOMREQUEST
(例如设置为DELETE
)将覆盖任何其他内置请求方法。只要我想要DELETE
事情就行了,但是调用例如curl_setopt(self::$curl, CURLOPT_HTTPGET, true)
将不会重置自定义方法; <{1}}仍会被使用。
我已尝试将DELETE
设置为CURLOPT_CUSTOMREQUEST
,null
或空字符串,但这只会导致HTTP请求,例如
false
即。使用空字符串作为方法,后跟空格,后跟路径。
我知道我可以将 /resources/whatever/items/123
设置为CURLOPT_CUSTOMREQUEST
并执行GET请求而不会有任何问题,但我想知道是否有可能重置GET
。
答案 0 :(得分:13)
这实际上是PHP中的a bug,因为原来的documentation声明如下:
通过将此设置为NULL恢复为内部默认值。
不幸的是,正如您在the source code中看到的那样,选项值在传递给底层库之前会被转换为字符串。
我写了pull request来解决问题,并允许NULL
选项值传递CURLOPT_CUSTOMREQUEST
。
以上补丁需要一段时间才能合并到项目中,因此在您开始使用此选项之前,您必须自己明确设置该方法。
修复程序已应用于5.5.11和5.6.0(beta1)。
答案 1 :(得分:0)
将CURLOPT_CUSTOMREQUEST设置为NULL并将CURLOPT_HTTPGET设置为TRUE以重置为普通GET。