php中可以通過curl來模擬http請求,同時可以獲取http response header和body,當然也設置參數可以只獲取其中的某一個,當設置同時獲取response header和body時候,它們會一同作為結果返回,這時需要我們自己來分離它們。
下面代碼是模擬向google一個http GET請求,代碼如下:
- function httpGet() {
- $url = 'http://www.google.com.hk';
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_HEADER, TRUE); //表示需要response header
- curl_setopt($ch, CURLOPT_NOBODY, FALSE); //表示需要response body
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
- curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
- curl_setopt($ch, CURLOPT_TIMEOUT, 120);
- $result = curl_exec($ch);
- if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
- return $result;
- }
- return NULL;
- }
調用上述方法后看到如下類似輸出:
這里可以看到結果中header和body信息是在一起的,那么如何分離它們呢,方法有二種,一是通過curl自帶的curl_getinfo()方法獲取頭的長度,然后使用substr來分割字符串,示例代碼如下:
- $response = curl_exec($ch);
- if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
- $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
- $header = substr($response, 0, $headerSize);
- $body = substr($response, $headerSize);
- }
第二種方法基于header和body是通過兩個回車換行來分割的,所以可以通過如下代碼實現:
- $response = curl_exec($ch);
- if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
- list($header, $body) = explode("rnrn", response, 2);
- }
新聞熱點
疑難解答