php curl curlopt_customrequest,php – 如何重置CURLOPT_CUSTOMREQUEST
我正在使用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實例是靜態(tài)的,將在后續(xù)調(diào)用中重用.在“內(nèi)置”請求方法之間切換時,這可以正常工作.例如,在我的get()方法中,我執(zhí)行以下操作:
curl_setopt_array(self::$curl, array(
CURLOPT_HTTPGET => true,
CURLOPT_URL => self::BASE . 'whatever',
));
然后運行curl_exec().通過CURLOPT_HTTPGET顯式設(shè)置請求方法,將清除可能的先前CURLOPT_POST.
但是,設(shè)置CURLOPT_CUSTOMREQUEST(例如,設(shè)置為DELETE)將覆蓋任何其他內(nèi)置請求方法.只要我想刪除東西,這很好,但是調(diào)用例如curl_setopt(self :: $curl,CURLOPT_HTTPGET,true)將不會重置自定義方法;仍將使用DELETE.
我已經(jīng)嘗試將CURLOPT_CUSTOMREQUEST設(shè)置為null,false或空字符串,但這只會導(dǎo)致HTTP請求
/resources/whatever/items/123
即使用空字符串作為方法,后跟空格,然后是路徑.
我知道我可以將CURLOPT_CUSTOMREQUEST設(shè)置為GET而不做任何問題的GET請求,但我想知道是否有可能重置CURLOPT_CUSTOMREQUEST.
解決方法:
這實際上是PHP中的a bug,因為原始的documentation聲明如下:
Restore to the internal default by setting this to NULL.
不幸的是,正如您在the source code中所看到的,選項值在傳遞給底層庫之前會被轉(zhuǎn)換為字符串.
解
我編寫了一個解決該問題的pull request,并允許為CURLOPT_CUSTOMREQUEST選項值傳遞NULL.
上面的補丁需要一些時間才能合并到項目中,因此在您開始使用此選項之前,您必須自己顯式設(shè)置該方法.
更新
該修復(fù)程序已應(yīng)用于5.5.11和5.6.0(beta1).
標簽:php,rest,curl
來源: https://codeday.me/bug/20191007/1868894.html
總結(jié)
以上是生活随笔為你收集整理的php curl curlopt_customrequest,php – 如何重置CURLOPT_CUSTOMREQUEST的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: custom的短语_custom到底是什
- 下一篇: empty多个变量php,php emp