1. 程式人生 > >php curl請求資訊和返回資訊

php curl請求資訊和返回資訊

在用curl抓取網頁內容的時候,經常要知道,網頁返回的請求頭資訊,和請求的相關資訊,特別是在請求過程中存在重定向的時候獲取請求返回頭資訊對分析請求內容很有幫助

下面就是一個請求中存在重定向的例子,我們的目的是要獲取最終實際請求的url地址

$url='http://www.appchina.com/market/r/489267/com.appshare.android.ilisten.vapk?c=aplus.direct&uid=gAJ9cQEu1TlyZxsXN-aB4RaanvFL6t6Bj-vj0rIBs&p=aplus.detail&m=redirect';

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_POST, 1);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HEADER, 1);//返回response頭部資訊
curl_setopt($ch, CURLOPT_NOBODY, 1);//不返回response body內容
//curl_setopt($ch, CURLOPT_MAXREDIRS, 1);//設定請求最多重定向的次數
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//不直接輸出response
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);//如果返回的response 頭部中存在Location值,就會遞迴請求
$content=curl_exec($ch);
$rinfo=curl_getinfo($ch);

echo $content,"</br>";
echo "<hr>";
print_r($rinfo);

下面是輸出的結果 HTTP/1.1 200 OKServer: nginxDate: Sat, 22 Dec 2012 06:17:44 GMTContent-Type: application/vnd.android.package-archiveConnection: closeLast-Modified: Mon, 03 Dec 2012 16:00:00 GMTExpires: Tue, 03 Dec 2013 16:00:00 GMTCache-Control: max-age=31536000Content-Length: 2142149
Array( [url] => http://www.d.appchina.com/McDonald/r/489267/com.appshare.android.ilisten.vapk?c=aplus.direct&uid=gAJ9cQEu1TlyZxsXN-aB4RaanvFL6t6Bj-vj0rIBs&p=aplus.detail&m=redirect [content_type] => application/vnd.android.package-archive [http_code] => 200 [header_size] => 289 [request_size] => 196 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.171621 [namelookup_time] => 0.135256 [connect_time] => 0.152913 [pretransfer_time] => 0.152916 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => 2142149 [upload_content_length] => 0 [starttransfer_time] => 0.171582 [redirect_time] => 0 [certinfo] => Array ( )) 

可以看到,經過遞迴請求後最終得到一個200的response,但是這中方式不能得到最後一次請求的url,也就是最終實際請求的url,要想得到這個url就需要遞迴的分析每次請求返回的response

下面是我寫的一個獲取最後一次請求url的遞迴函式

$url='http://www.appchina.com/market/r/489267/com.appshare.android.ilisten.vapk?c=aplus.direct&uid=gAJ9cQEu1TlyZxsXN-aB4RaanvFL6t6Bj-vj0rIBs&p=aplus.detail&m=redirect';
$realUrl=getRedirectLocation($url);

echo "</br>--->",$realUrl;

function getRedirectLocation($url){
	
	$realUrl=$url;
	echo $url,"</br>";
	$ch=curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_TIMEOUT, 3);//設定curl執行時間不超過3秒
	//curl_setopt($ch, CURLOPT_NOBODY, 1);//這行不能要,如果添上,那麼在遇到302重定向的時候就會得不到真正的請求url
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	$content=curl_exec($ch);
	//echo $content;
	$rinfo=curl_getinfo($ch);
	$matches=array();
	if(preg_match('/Location:\s+?(.+?)\s+?/', $content,$matches)){
		//echo $matches[1],"</br>";
		unset($content);
		$realUrl=getRedirectLocation($matches[1]);
	}
	if(isset($content)){
		unset($content);
	}
	return $realUrl;
}


相關推薦

php curl請求資訊返回資訊

在用curl抓取網頁內容的時候,經常要知道,網頁返回的請求頭資訊,和請求的相關資訊,特別是在請求過程中存在重定向的時候獲取請求返回頭資訊對分析請求內容很有幫助 下面就是一個請求中存在重定向的例子,我們的目的是要獲取最終實際請求的url地址 $url='http://ww

PHP curl請求getPost的請求方法+Headers引數

1:POST請求方式 $url = 'https://www.baidu.com/';//請求地址 //header 引數填寫方式 'tepy:2' $header = [ 'tepy:2' ]; //請求是實體資料 $content = [

php curl請求httphttps

常規curl請求:$url = 'http://www.jb51.net'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 1);

php curl請求。header頭中新增請求資訊

function get_data($key,$authorization,$url){       $headers = array(       'api-key:'.$key,       'a

php curl請求https 返回無結果|false|errno:35

download 版本 sign sel subject ble etop fig 問題 1 SSL: certificate subject name ‘WMSvc-GWAMSERVER02‘ does not match target host name 把cu

fiddler 攔截指定的請求, 並獲取請求token資訊

開啟 fiddler -> rules ->customize rules 編輯customizerules.js 檔案 找到OnBeforeRequest方法 在這個方法體的第一行新增如下程式碼(說明:if判斷中的域名自行定義,可攔截指定的域名請求資訊) if (oSe

PHP curl請求錯誤彙總解決方案

最近做了一個伺服器監控,需要通過curl發出大量的http請求,這裡列舉了一下curl返回的常見錯誤碼,方便下次排查問題: 錯誤資訊 含義 解決方案 Illegal characters found in URL URL中包含"\r",“\n"特殊字元 C

php curl 請求下載檔案,以及同時向介面傳送引數檔案

最近在弄抓取資料,自然而然用到curl,結合其中遇到的一些問題,google了很久,加上自己嘗試,最後都解決了。 首先是php curl 從url 下載檔案 function getImage($url, $fileName) { $ch = curl

http使用post上傳檔案時,請求主體資訊總結

HEADER:  寫道 ...... Content-Type: multipart/form-data; BODY: Content-type: multipart/form-data, boundary=AaB03x --AaB03x content-d

php curl 請求302跳轉頁面

turn follow 自動跳轉 接口 exe col dump details useragent 今天對接支付接口,需要獲取支付頁面,發現支付商那邊給的鏈接會發送302 跳轉,最後發現該方法,絕對給力: <?php $url = ‘http://auto.jrj

PHP curl請求https遇到的坑

無法 ret out function private 數據 fun header 驗證 PHP裏curl對https的證書配置默認是服務器端要求驗證的,如果服務器端沒有配置證書驗證,則無法請求https路徑。如果為了簡便使用不需要配置https證書的話,配置curl時將以

php curl請求接口並獲取數據

sta .net return create tag tar url 輸出顯示 實現 當我們在做php開發的時候,很多時候需要對接口進行測試,或者更方便的調用一些已有模塊的接口,取到結果並進行後續操作,我們可以通過curl進行模擬提交post和get請求,來去實現這些功能。

PHP Curl請求Https接口

html code urn operator nec tran ring AR image 在請求http的時候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Po

php curl請求接口碰到的問題總結

json字符串 使用curl 字段名 設置 com -type 方式 文檔 還要 用php curl請求接口碰到的問題 今天碰到個用php擴展curl類庫命令實現linux curl的情況,碰到了一些小問題,總結總結。 場景 向資源方請求實現某種功能。相關同學給出了例子:

spring AOP的@Around輸出請求引數返回引數

spring 的AOP是通過cglib動態代理和jdk的動態代理實現的。 先把我的列印日誌程式碼貼出來 package com.zhd.exploit.api.config; import java.util.HashMap; import java.util.Map; imp

遙感影象處理 | 採用GDAL讀取影象成功後獲取影象的一些基本資訊統計資訊(C#)

描述資訊:  const char*  GDALDataset.GetDriver().GetDescription(),通常是影象的格式 影象大小:  影象寬度  int  GDALDataset.GetRasterXSize() &nbs

切面(Aspect)獲取請求引數返回

@Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到請求,記錄請求內容 ServletRequestAttributes attr

Spring RestTemplate 利用攔截器列印請求引數返回狀態

  最近在專案中遇到用RestTemplate請求另外一個服務介面,發現總是報400返回。或許由於對400錯誤不是很瞭解,除錯了很久。但是過了好一段時間,發現自己進展不大,由此,諮詢下了經驗豐富的人,也解決了RestTemplate請求另外服務介面的方法。    很多人都基

通過java程式碼獲取jvm資訊系統資訊

轉載自LOC_Thomas的部落格 前言 隨著微服務的概念逐漸流行,監控成了必不可少的模組,本篇文章主要介紹一下如何通過java程式碼獲得一些核心的資料,方便從各個方面對應用進行監控 獲取jvm資料 jvm資料是監控應用很重要的一系列引數,一般本地開發的時候可以通過jcons

php curl請求頁面數據

transfer init pty code 提交 tput col close field 1    /** 2 * 3 * [curl_post post方式請求] 4 * 5 * @param [type