部門對外提供了一個HTTP的POST介面,但是對方公司的程式員使用C語言進行的呼叫,PHP這邊一直無法獲取到引數.遇到這種情況是因為對方沒有完全按照HTTP協議中的POST發送資料.在HTTP頭部分沒有增加Content-Type: application/x-www-form-urlencoded頭,資料部分直接傳遞的json字串,這樣就導致PHP這邊決議不到$_POST的資料,傳遞內容的字串應該是以name=xxx&age=xxx這種形式傳遞
Content-Type是屬于HTTP的內容頭部,當增加這個頭部,并且資料格式正確時,PHP的$_POST才能夠獲取得到資料
Content-Type:application/x-www-form-urlencoded,這個型別是ajax默認的content-type型別,這時前端可以以物件方式直接給后端,或者以json方式傳給后端, 當action為get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form資料轉換成一個字串(name1=value1&name2=value2...),然后把這個字串append到url后面,用?分割,加載這個新的url, 當action為post時候,瀏覽器把form資料封裝到http body中,然后發送到server,在瀏覽器控制臺可以看到它們的內容都是以'From Data'形式展現
Content-Type:application/json
如果ajax的頭部是application/json,那么post時,資料必須以json格式傳給后端,這時后端在$_POST中不能直接接受到資料,必須用$GLOBALS['HTTP_RAW_POST_DATA']取出來,然后再json_decode就行了,
if($GLOBALS['CONTENT_TYPE']=='application/json'){
$_POST=json_decode($GLOBALS['HTTP_RAW_POST_DATA']);
}
Content-Type:multipart/form-data是上傳檔案時指定的編碼格式
還有就是當請求HTTPS的資料時,需要指定CA證書的位置,或者忽略掉CA驗證,PHP請求HTTPS資源的時候使用curl擴展有引數可以忽略驗證,如果是使用curl命令,那該命令使用的證書的位置是在/etc/pki/tls/certs/ca-bundle.crt
當使用cur無法訪問HTTPS資源的時候,就需要下面的操作
1.需要下載CA證書 檔案地址是 http://curl.haxx.se/ca/cacert.pem
2.把下載的檔案放到這個位置 /etc/pki/tls/certs/ca-bundle.crt
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/131460.html
標籤:PHP
